# jpa-starter **Repository Path**: wxjack92/jpa-starter ## Basic Information - **Project Name**: jpa-starter - **Description**: springboot整合spring data jpa 实现多数据源,动态数据源和自动建库建表 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-10-09 - **Last Updated**: 2022-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot整合spring-boot-starter-data-jpa > 项目使用spring-boot-starter-data-jpa和druid-spring-boot-starter实现多数据源,动态数据源和自动建库建表 ## 1.新建springboot项目,pom.xml导入依赖 ` mysql mysql-connector-java runtime com.oracle.database.jdbc ojdbc8 runtime 21.5.0.0 com.alibaba druid-spring-boot-starter 1.2.8 org.springframework.boot spring-boot-starter-data-jpa ` ## 2.yml配置文件 ` spring: #数据源配置 datasource: type: com.alibaba.druid.pool.DruidDataSource druid: master: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: root slave1: enable: true driverClassName: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@127.0.0.1:1521:xe?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: boot password: boot slave: driverClassName: com.mysql.cj.jdbc.Driver enable: true url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: root #初始连接数 initialSize: 5 #最小连接池数量 minIdle: 10 #最大连接池数量 maxActive: 20 #配置获取连接等待超时的时间 maxWait: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 #配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 #配置一个连接在池中最大生存的时间,单位是毫秒 maxEvictableIdleTimeMillis: 900000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false #打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 #配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙,此处是filter修改的地方 filters: commons-log.connection-logger-name: stat,wall,log4j #通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 #合并多个DruidDataSource的监控数据 useGlobalDataSourceStat: true #配置 DruidStatFilter web-stat-filter: enabled: true url-pattern: /* exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/* stat-view-servlet: enabled: true url-pattern: /druid/* #IP 白名单,没有配置或者为空,则允许所有访问 allow: 127.0.0.1 #IP 黑名单,若白名单也存在,则优先使用 deny: 192.168.31.253 #禁用 HTML 中 Reset All 按钮 reset-enable: false #登录用户名/密码 login-username: admin login-password: 123456 #慢SQL记录 filter: stat: enabled: true #慢SQL记录 log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true jpa: properties: hibernate: show_sql: true hbm2ddl: auto: update ` ## 3.包文件介绍 #### 数据源配置 com.example.jpa.config.DruidDataSourceConfig #### 事务配置 com.example.jpa.config.DruidTransactionMasterConfig com.example.jpa.config.DruidTransactionSlaveConfig #### 注解式AOP切面,用于实现动态数据源 com.example.jpa.annotation.DataSource com.example.jpa.aspect.DynamicDataSourceAspect #### 常量文件 com.example.jpa.constant.DataSourcesType #### 工具类 com.example.jpa.utils.DynamicDataSourceContextHolder #### 实体类扫描包 自动建库建表扫描包 com.example.jpa.pojo 基本pojo类: com.example.jpa.pojo.base.BasePojo 自定义注解生成策略: com.example.jpa.pojo.base.HibernateUUIDKeyGenerator 自动建表字段顺序错乱解决办法 org.hibernate.cfg.PropertyContainer #### 主数据源扫描包 com.example.jpa.master #### 从数据源扫描包 com.example.jpa.slave