中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

情感視頻素材網(wǎng)站劉連康seo培訓(xùn)哪家強(qiáng)

情感視頻素材網(wǎng)站,劉連康seo培訓(xùn)哪家強(qiáng),網(wǎng)站推廣的六種方式,黑彩網(wǎng)站充值就給你做單子Jpa與Druid線程池及Spring Boot整合(一) Jpa與Druid線程池及Spring Boot整合(二):幾個(gè)坑 附錄官網(wǎng)文檔:core.domain-events域事件 從聚合根發(fā)布事件 存儲(chǔ)庫(kù)管理的實(shí)體是聚合根。在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)應(yīng)用程序中,這些聚合根通常會(huì)發(fā)布領(lǐng)域事件。Sp…

? ? ? ? ? ? ? ? ? ??


?Jpa與Druid線程池及Spring Boot整合(一)

Jpa與Druid線程池及Spring Boot整合(二):幾個(gè)坑

附錄官網(wǎng)文檔:core.domain-events域事件


從聚合根發(fā)布事件

存儲(chǔ)庫(kù)管理的實(shí)體是聚合根。在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)應(yīng)用程序中,這些聚合根通常會(huì)發(fā)布領(lǐng)域事件。Spring Data 提供了一個(gè)名為 的注釋@DomainEvents,您可以在聚合根的方法上使用該注釋,以使該發(fā)布盡可能簡(jiǎn)單,如以下示例所示:

示例 43. 從聚合根公開域事件
class AnAggregateRoot {@DomainEvents (1)Collection<Object> domainEvents() {// … return events you want to get published here}@AfterDomainEventPublication (2)void callbackMethod() {// … potentially clean up domain events list}
}
使用的方法@DomainEvents可以返回單個(gè)事件實(shí)例或事件集合。它不能接受任何參數(shù)。
發(fā)布所有事件后,我們有一個(gè)用 注釋的方法@AfterDomainEventPublication。您可以使用它來(lái)潛在地清理要發(fā)布的事件列表(以及其他用途)。

每次調(diào)用以下 Spring 數(shù)據(jù)存儲(chǔ)庫(kù)方法之一時(shí)都會(huì)調(diào)用這些方法:

  • save(…),saveAll(…)

  • delete(…),?deleteAll(…),?deleteAllInBatch(…),deleteInBatch(…)

請(qǐng)注意,這些方法將聚合根實(shí)例作為參數(shù)。這就是為什么deleteById(…)明顯不存在的原因,因?yàn)閷?shí)現(xiàn)可能會(huì)選擇發(fā)出刪除實(shí)例的查詢,因此我們首先永遠(yuǎn)無(wú)法訪問(wèn)聚合實(shí)例。


在使用Spring Boot JPA時(shí),open-in-view 選項(xiàng)默認(rèn)為true。啟動(dòng)時(shí)在日志中會(huì)出現(xiàn)警告。?

一坑:druid與jpa整合,啟動(dòng)出現(xiàn)如下警告:

JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning

?處理方案:

按照日志要求將 open-in-view=false。再次啟動(dòng),如果在實(shí)體類中外鍵字段使用了懶加載模式,在視圖層中調(diào)用數(shù)據(jù)時(shí),則會(huì)出現(xiàn) no session 異常。

解決方法:手動(dòng)注冊(cè)O(shè)penEntityManagerInViewFilter過(guò)濾器,改變session的生命周期,當(dāng)web請(qǐng)求關(guān)閉時(shí)才結(jié)束session。
?


? javaConfig注入bean

@Bean
public FilterRegistrationBean<OpenEntityManagerInViewFilter> registerOpenEntityManagerInViewFilterBean() {FilterRegistrationBean<OpenEntityManagerInViewFilter> registrationBean = new FilterRegistrationBean<>();OpenEntityManagerInViewFilter filter = new OpenEntityManagerInViewFilter();registrationBean.setFilter(filter);registrationBean.setOrder(5);return registrationBean;
}

解疑:

如果使用的是 JPA 則對(duì)應(yīng)OpenEntityManagerInViewFilter,Hibernate對(duì)應(yīng)OpenSessionInViewFilter
疑問(wèn):

registrationBean.setOrder(5),order為什么是5
OpenSessionInViewInterceptor&OpenSessionInViewFilter,OpenEntityManagerInViewInterceptor&OpenEntityManagerInViewFilter這幾個(gè)類的區(qū)別以及使的的場(chǎng)景

?


重新啟動(dòng): 正常:


二坑:? ?springboot整合JPA出現(xiàn)異常java.lang.IllegalArgumentException: Not a managed type: class xx

方案: 一

啟動(dòng)類或者JavaConfig添加添加掃描實(shí)體的路徑:
@EntityScan(basePackages = "org.jd.websocket.auth.data.reactor.jpa")
@EnableTransactionManagement // 開啟事務(wù)的支持
@EnableJpaRepositories(basePackages = {"org.jd.websocket.auth.data.reactor.repository","org.jd.websocket.auth.data.reactor.jpa"},includeFilters = {@ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*CrudRepository")},excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*SomeOtherRepository")})

?方案: 二

@Configuration? ? ?javaConfig中注入Bean

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();vendorAdapter.setGenerateDdl(true);LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();factory.setJpaVendorAdapter(vendorAdapter);// entity掃描的包路徑factory.setPackagesToScan("org.jd.websocket.auth.data.reactor.jpa");factory.setDataSource(dataSource());return factory;
}

@Value("${spring.datasource.url}")
private String dbUrl;@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;@Value("${spring.datasource.initialSize}")
private int initialSize;
@Value("${spring.datasource.minIdle}")
private int minIdle;
@Value("${spring.datasource.maxActive}")
private int maxActive;
@Value("${spring.datasource.maxWait}")
private int maxWait;
@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.validationQuery}")
private String validationQuery;
@Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.datasource.poolPreparedStatements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
private int maxPoolPreparedStatementPerConnectionSize;
@Value("${spring.datasource.filters}")
private String filters;
@Value("{spring.datasource.connectionProperties}")
private String connectionProperties;@Bean
@Primary
public DataSource dataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(dbUrl);datasource.setUsername(username);datasource.setPassword(password);datasource.setDriverClassName(driverClassName);// configurationdatasource.setInitialSize(initialSize);datasource.setMinIdle(minIdle);datasource.setMaxActive(maxActive);datasource.setMaxWait(maxWait);datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setValidationQuery(validationQuery);datasource.setTestWhileIdle(testWhileIdle);datasource.setTestOnBorrow(testOnBorrow);datasource.setTestOnReturn(testOnReturn);datasource.setPoolPreparedStatements(poolPreparedStatements);datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);try {datasource.setFilters(filters);} catch (SQLException e) {System.err.println("druid configuration initialization filter: " + e);}datasource.setConnectionProperties(connectionProperties);return datasource;
}@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();vendorAdapter.setGenerateDdl(true);LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();factory.setJpaVendorAdapter(vendorAdapter);// entity掃描的包路徑factory.setPackagesToScan("org.jd.websocket.auth.data.reactor.jpa");factory.setDataSource(dataSource());return factory;
}

坑三:? ? 多數(shù)據(jù)源注入,事務(wù)失效|解決方案;

* @Transactiona在多數(shù)據(jù)源下失效
* 在多數(shù)據(jù)源的情況下,如果transactionManager進(jìn)行了分開配置,比如這里針對(duì)三個(gè)數(shù)據(jù)源配置了三個(gè)transactionManager
* ===========================================================================================================
* @Bean("formTransactionManager")
* public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
*     return new JpaTransactionManager(Objects.requireNonNull(entityManagerFactory(builder).getObject()));
* }
*=============================================================================================================
* @Bean("fileTransactionManager")
* public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
*     return new JpaTransactionManager(Objects.requireNonNull(entityManagerFactory(builder).getObject()));
* }
* ============================================================================================================
* @Primary
* @Bean("userTransactionManager")
* public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
*     return new JpaTransactionManager(Objects.requireNonNull(entityManagerFactory(builder).getObject()));
* }
* =============================================================================================================
*
* 那么在使用@Transactional的時(shí)候需要指定transactionManager
* @Transactional("formTransactionManager")

@EnableTransactionManagement // 開啟事務(wù)的支持

可以訪問(wèn)下druid監(jiān)控相關(guān)數(shù)據(jù):

http://localhost:9999/druid/

輸入上面的賬號(hào)和密碼:? 可以查看不同的選項(xiàng)卡,能幫助我們排查一些數(shù)據(jù)庫(kù)相關(guān)問(wèn)題

http://www.risenshineclean.com/news/29141.html

相關(guān)文章:

  • 網(wǎng)站建設(shè)和網(wǎng)站推廣可以同一家做嗎網(wǎng)站優(yōu)化排名金蘋果系統(tǒng)
  • 企業(yè)網(wǎng)站建設(shè)英文超級(jí)外鏈
  • 手機(jī)網(wǎng)站哪家好西安百度推廣優(yōu)化
  • 網(wǎng)站開發(fā) 英文文章百度收錄快的發(fā)帖平臺(tái)
  • 福州網(wǎng)頁(yè)鄭州seo排名優(yōu)化公司
  • 汕頭網(wǎng)站建設(shè)制作公司衡陽(yáng)seo快速排名
  • 分類信息網(wǎng)站成都搭建如何搭建一個(gè)網(wǎng)站平臺(tái)
  • 做網(wǎng)站的點(diǎn)子站長(zhǎng)之家ppt素材
  • 同程網(wǎng)站建設(shè)分析朝陽(yáng)網(wǎng)站建設(shè)公司
  • 深圳住建委網(wǎng)站智謀網(wǎng)站優(yōu)化公司
  • html5門戶網(wǎng)站模板百度人工客服電話多少
  • 鄭州做網(wǎng)站九零后排名點(diǎn)擊工具
  • 網(wǎng)站開發(fā)程序員 工資百度云怎么找資源
  • 貴陽(yáng)網(wǎng)站建設(shè)多少錢?影視后期培訓(xùn)機(jī)構(gòu)全國(guó)排名
  • 如何搭建公司網(wǎng)站上海公關(guān)公司
  • 做美圖 網(wǎng)站有哪些付費(fèi)惡意點(diǎn)擊軟件
  • 做局域網(wǎng)網(wǎng)站教程?hào)|莞網(wǎng)絡(luò)優(yōu)化調(diào)查公司
  • 慈溪企業(yè)排名網(wǎng)站培訓(xùn)機(jī)構(gòu)排名全國(guó)十大教育機(jī)構(gòu)排名
  • 做腳本網(wǎng)站建站公司最新報(bào)價(jià)
  • 網(wǎng)站海外推廣哪家好怎么在百度上發(fā)表文章
  • 怎樣做已有網(wǎng)站的編輯維護(hù)四川聚順成網(wǎng)絡(luò)科技有限公司
  • wordpress自建站哪里換logo騰訊企點(diǎn)客服
  • 印度做網(wǎng)站設(shè)計(jì)百度權(quán)重提升
  • 快速收錄網(wǎng)站微信公眾號(hào)運(yùn)營(yíng)
  • 云谷 網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣的方法有
  • 精美化妝品網(wǎng)站模板推廣平臺(tái)排名前十名
  • 專業(yè)微網(wǎng)站建設(shè)公司首選公司哪家好網(wǎng)站排名軟件
  • 黨員寫試卷需要在哪個(gè)網(wǎng)站做輿情管理
  • 建網(wǎng)站學(xué)什么谷歌搜索引擎香港免費(fèi)入口
  • 注冊(cè)網(wǎng)站到公安機(jī)關(guān)備案由誰(shuí)告知seo關(guān)鍵詞排名優(yōu)化要多少錢