SpringBoot整合阿里Druid数据源及Spring-Data-Jpa

举报
西魏陶渊明 发表于 2022/09/25 01:43:09 2022/09/25
【摘要】 最近开辟了一个新项目,因为初期考虑到可能会调整数据库的风险,所以orm,在设计之初就考虑为Spring Data Jpa, 以下是工程data层数据,整体是参照配置多数据源的方案,进行配置的 目录 因为阿里数据源Druid 整合数据源及其他事务配置pom依赖 整合事务 @EnableAutoConfiguration@S...

最近开辟了一个新项目,因为初期考虑到可能会调整数据库的风险,所以orm,在设计之初就考虑为Spring Data Jpa, 以下是工程data层数据,整体是参照配置多数据源的方案,进行配置的

目录

  • 因为阿里数据源Druid
  • 整合数据源及其他事务配置
  • pom依赖

整合事务


  
  1. @EnableAutoConfiguration
  2. @SpringBootApplication
  3. @EnableTransactionManagement
  4. @ComponentScan(basePackages = {"com.inn.developer"})
  5. public class CodeApplication {
  6. public static void main(String[] args) {
  7. new SpringApplicationBuilder().web(true).sources(CodeApplication.class).run(args);
  8. }
  9. }

创建DruidProperties配置


  
  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. @ConfigurationProperties(prefix = "druid")
  5. public class DruidProperties {
  6. ...

数据库参数可以参考:

参数 默认值 解释
initialSize 3 初始化配置
minIdle 3 最小连接数
maxActive 15 最大连接数
maxWait 5000 获取连接超时时间(单位:ms)
timeBetweenEvictionRunsMillis 90000 连接有效性检测时间(单位:ms)
testOnBorrow false 获取连接检测
testOnReturn false 归还连接检测
minEvictableIdleTimeMillis 1800000 最大空闲时间(单位ms)
testWhileIdle true 在获取连接后,确定是否要进行连接空间时间的检查
  • 配置说明:

1:minEvictableIdleTimeMillis(最大空闲时间):默认为30分钟,配置里面不进行设置。

2:testOnBorrow ,testOnReturn 默认为关闭,可以设置为不配置。

3:testWhileIdle(在获取连接后,确定是否要进行连接空闲时间的检查)。默认为true。配置里面不再进行设置。

  • 流程说明:

1:在第一次调用connection的时候,才会进行 initialSize的初始化。

2:心跳检测时间线程,会休眠timeBetweenEvictionRunsMillis时间,然后只对(没有borrow的线程 减去 minIdle)的线程进行检查,如果空闲时间大于minEvictableIdleTimeMillis则进行close。

3:testWhileIdle必须设置为true,在获取到连接后,先检查testOnBorrow,然后再判定testwhileIdle,如果连接空闲时间大于timeBetweenEvictionRunsMillis,则会进行心跳检测。

4:不需要配置validationQuery,如果不配置的情况下会走ping命令,性能更高。

5:连接保存在数组里面,获取连接的时候,获取数组的最后一位。在imeBetweenEvictionRunsMillis时是从前往后进行检查连接的有效性。

配置数据源及hibernate适配

数据源对象创建还是和之前一样,
笔者不太喜欢xml的方式,所以还是采用配置类

DruidAutoJpaConfiguration


  
  1. @Configuration
  2. @EnableConfigurationProperties(DruidProperties.class)//开启属性注入,通过@autowired注入
  3. @ConditionalOnClass(DruidDataSource.class)//表示对应的类在classpath目录下存在时,才会去解析对应的配置文件
  4. @ConditionalOnProperty(prefix = "druid", name = "url")
  5. @EnableJpaRepositories(basePackages = "com.inn.developer.model.dao",transactionManagerRef = "jpaTransactionManager", entityManagerFactoryRef = "localContainerEntityManagerFactoryBean")
  6. public class DruidAutoJpaConfiguration {
  7. @Autowired
  8. private DruidProperties properties;
  9. @Bean(name = "druidDataSource")
  10. @Primary
  11. public DataSource dataSource() {
  12. DruidDataSource dataSource = new DruidDataSource();
  13. dataSource.setUrl(properties.getUrl());
  14. dataSource.setUsername(properties.getUsername());
  15. dataSource.setPassword(properties.getPassword());
  16. dataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis());
  17. if (properties.getInitialSize() > 0) {
  18. dataSource.setInitialSize(properties.getInitialSize());
  19. }
  20. if (properties.getMinIdle() > 0) {
  21. dataSource.setMinIdle(properties.getMinIdle());
  22. }
  23. if (properties.getMaxActive() > 0) {
  24. dataSource.setMaxActive(properties.getMaxActive());
  25. }
  26. dataSource.setTestOnBorrow(properties.isTestOnBorrow());
  27. dataSource.setValidationQuery("select version()");
  28. try {
  29. dataSource.init();
  30. } catch (SQLException e) {
  31. throw new RuntimeException(e);
  32. }
  33. return dataSource;
  34. }
  35. /**
  36. * hibernate 适配器,定制方言为mysql,并打印sql
  37. *
  38. * @return
  39. */
  40. @Bean(name = "hibernateJpaVendorAdapter")
  41. @Primary
  42. public HibernateJpaVendorAdapter hibernateJpaVendorAdapter() {
  43. HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
  44. hibernateJpaVendorAdapter.setShowSql(true);
  45. hibernateJpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");
  46. return hibernateJpaVendorAdapter;
  47. }
  48. @Bean(name = "localContainerEntityManagerFactoryBean")
  49. @Primary
  50. public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(@Qualifier("druidDataSource") DataSource dataSource
  51. ,@Qualifier("hibernateJpaVendorAdapter") HibernateJpaVendorAdapter hibernateJpaVendorAdapter) {
  52. LocalContainerEntityManagerFactoryBean local = new LocalContainerEntityManagerFactoryBean();
  53. local.setDataSource(dataSource);
  54. local.setJpaVendorAdapter(hibernateJpaVendorAdapter);
  55. local.setPackagesToScan("com.inn.developer.model.domain");
  56. Properties properties = new Properties();
  57. properties.put("hibernate.format_sql", true);
  58. properties.put("hibernate.hbm2ddl.auto", "update");
  59. local.setJpaProperties(properties);
  60. return local;
  61. }
  62. @Bean(name = "jpaTransactionManager")
  63. @Primary
  64. public JpaTransactionManager jpaTransactionManager(@Qualifier("localContainerEntityManagerFactoryBean") LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) {
  65. JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
  66. EntityManagerFactory object = entityManagerFactoryBean.getObject();
  67. jpaTransactionManager.setEntityManagerFactory(object);
  68. return jpaTransactionManager;
  69. }

pom依赖


  
  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-data-jpa</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.projectlombok</groupId>
  11. <artifactId>lombok</artifactId>
  12. <version>1.16.6</version>
  13. <scope>provided</scope>
  14. </dependency>
  15. <dependency>
  16. <groupId>com.alibaba</groupId>
  17. <artifactId>druid</artifactId>
  18. <version>1.0.11</version>
  19. </dependency>
  20. <!--依赖Spring 4.3.6之core、context、aop、beans、tx、orm和spring data commons -->
  21. <dependency>
  22. <groupId>org.springframework.data</groupId>
  23. <artifactId>spring-data-jpa</artifactId>
  24. <version>1.11.3.RELEASE</version>
  25. </dependency>
  26. <!--hibernate 实现JPA的框架 -->
  27. <dependency>
  28. <groupId>org.hibernate</groupId>
  29. <artifactId>hibernate-entitymanager</artifactId>
  30. <version>5.2.5.Final</version>
  31. </dependency>
  32. <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
  33. <dependency>
  34. <groupId>org.hibernate</groupId>
  35. <artifactId>hibernate-core</artifactId>
  36. <version>5.2.11.Final</version>
  37. </dependency>
  38. <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-annotations -->
  39. <dependency>
  40. <groupId>org.hibernate</groupId>
  41. <artifactId>hibernate-annotations</artifactId>
  42. <version>3.5.6-Final</version>
  43. </dependency>

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/102425348

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。