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

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

https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=2247484669&idx=1&sn=f28a9ae8067af39c8d9406b7842c7751&chksm=fb3f1d06cc489410bc5bc5ad1a857bc239962539bd51a239f406644055ef7fcbdc7975288899&scene=0&key=f90f52b171784d83da3e317c903ae4bebd202ad3353a3030ce03cbe404e2527b0b1d0761a9029f0eee109af1a66f4d9f15384196a9686dca43c689473de1369b24c20156685eedd7f09328bbcc55459c&ascene=1&uin=MjgwMTEwNDQxNg%3D%3D&devicetype=Windows-QQBrowser&version=6103000b&lang=zh_CN&pass_ticket=Pbtuc%2B57vDHGrUKlz7gN6m3DE%2BsmcWebe008LyFC7dD5%2B8zGrdL8USzjdzIexKLI
 

最近开辟了一个新项目,因为初期考虑到可能会调整数据库的风险,所以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.  

  10.    @Bean(name = "druidDataSource")

  11.    @Primary

  12.    public DataSource dataSource() {

  13.        DruidDataSource dataSource = new DruidDataSource();

  14.        dataSource.setUrl(properties.getUrl());

  15.        dataSource.setUsername(properties.getUsername());

  16.        dataSource.setPassword(properties.getPassword());

  17.        dataSource.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRunsMillis());

  18.        if (properties.getInitialSize() > 0) {

  19.            dataSource.setInitialSize(properties.getInitialSize());

  20.        }

  21.        if (properties.getMinIdle() > 0) {

  22.            dataSource.setMinIdle(properties.getMinIdle());

  23.        }

  24.        if (properties.getMaxActive() > 0) {

  25.            dataSource.setMaxActive(properties.getMaxActive());

  26.        }

  27.        dataSource.setTestOnBorrow(properties.isTestOnBorrow());

  28.        dataSource.setValidationQuery("select version()");

  29.        try {

  30.            dataSource.init();

  31.        } catch (SQLException e) {

  32.            throw new RuntimeException(e);

  33.        }

  34.        return dataSource;

  35.    }

  36.  

  37.  

  38.    /**

  39.     * hibernate 适配器,定制方言为mysql,并打印sql

  40.     *

  41.     * @return

  42.     */

  43.    @Bean(name = "hibernateJpaVendorAdapter")

  44.    @Primary

  45.    public HibernateJpaVendorAdapter hibernateJpaVendorAdapter() {

  46.        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();

  47.        hibernateJpaVendorAdapter.setShowSql(true);

  48.        hibernateJpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");

  49.        return hibernateJpaVendorAdapter;

  50.    }

  51.  

  52.    @Bean(name = "localContainerEntityManagerFactoryBean")

  53.    @Primary

  54.    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(@Qualifier("druidDataSource") DataSource dataSource

  55.            ,@Qualifier("hibernateJpaVendorAdapter") HibernateJpaVendorAdapter hibernateJpaVendorAdapter) {

  56.        LocalContainerEntityManagerFactoryBean local = new LocalContainerEntityManagerFactoryBean();

  57.        local.setDataSource(dataSource);

  58.        local.setJpaVendorAdapter(hibernateJpaVendorAdapter);

  59.        local.setPackagesToScan("com.inn.developer.model.domain");

  60.        Properties properties = new Properties();

  61.        properties.put("hibernate.format_sql", true);

  62.        properties.put("hibernate.hbm2ddl.auto", "update");

  63.        local.setJpaProperties(properties);

  64.        return local;

  65.    }

  66.  

  67.    @Bean(name = "jpaTransactionManager")

  68.    @Primary

  69.    public JpaTransactionManager jpaTransactionManager(@Qualifier("localContainerEntityManagerFactoryBean") LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) {

  70.        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();

  71.        EntityManagerFactory object = entityManagerFactoryBean.getObject();

  72.        jpaTransactionManager.setEntityManagerFactory(object);

  73.        return jpaTransactionManager;

  74.    }

pom依赖

  1.            mysql

  2.            mysql-connector-java

  3.        

  4.        

  5.            org.springframework.boot

  6.            spring-boot-starter-data-jpa

  7.        

  8.  

  9.        

  10.            org.projectlombok

  11.            lombok

  12.            1.16.6

  13.            provided

  14.        

  15.  

  16.          

  17.            com.alibaba

  18.            druid

  19.            1.0.11

  20.        

  21.  

  22.        

  23.        

  24.            org.springframework.data

  25.            spring-data-jpa

  26.            1.11.3.RELEASE

  27.        

  28.  

  29.        

  30.        

  31.            org.hibernate

  32.            hibernate-entitymanager

  33.            5.2.5.Final

  34.        

  35.  

  36.        

  37.        

  38.            org.hibernate

  39.            hibernate-core

  40.            5.2.11.Final

  41.        

  42.        

  43.        

  44.            org.hibernate

  45.            hibernate-annotations

  46.            3.5.6-Final

  47.        

 

招人:数心,造化心数奇;用心等你...

上一篇:webflux 与swagger2.x

你可能感兴趣的:(java,数据库)