赞
踩
原文地址:http://www.cnblogs.com/niuzhifa/p/9279543.html
目录
- <!--mysql依赖-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
-
- <!--sqllite依赖-->
- <!--...-->
- #数据库配置
- mysql.spring.datasource.jdbc-url =jdbc:mysql://127.0.0.1:3306/test
- mysql.spring.datasource.username=admin
- mysql.spring.datasource.password=123456
- mysql.spring.datasource.driver-class-name=com.mysql.jdbc.Driver
-
- #数据库连接池
- mysql.spring.datasource.max-idle=100
- mysql.spring.datasource.max-wait=10000
- mysql.spring.datasource.min-idle=5
- mysql.spring.datasource.initial-size=5
-
- #sqlite数据库的配置
- sqlite.spring.datasource.jdbc-url = jdbc:sqlite:test.db
- sqlite.spring.datasource.driver-class-name = org.sqlite.JDBC
- sqlite.spring.datasource.username =
- sqlite.spring.datasource.password =
-
- #关闭hibernate的自动创建表结构的机制
- spring.jpa.hibernate.ddl-auto=none
- spring.jpa.show-sql=true

- @Configuration
- public class DataSourceConfig {
- @Bean(name = "sqliteDataSource")
- @ConfigurationProperties(prefix = "sqlite.spring.datasource")
- public DataSource sqliteDataSource(){
- return DataSourceBuilder.create().build();
- }
-
- @Primary //配置该数据源为主数据源
- @Bean(name = "mysqlDataSource")
- @ConfigurationProperties(prefix = "mysql.spring.datasource")
- public DataSource mysqlDataSource(){
- return DataSourceBuilder.create().build();
- }
- }
- @Configuration
- @EnableTransactionManagement
- @EnableJpaRepositories(
- entityManagerFactoryRef = "entityManagerFactoryMysql", //EntityManagerFactory引用
- transactionManagerRef = "transactionManagerMysql", //transactionManager引用
- basePackages = {"com.xxx.mysql"})
- public class MysqlDataSourceConfig {
- /**
- * 注入 mysql数据源
- */
- @Resource(name = "mysqlDataSource")
- private DataSource mysqlDataSource;
-
- /**
- * 注入JPA配置实体
- */
- @Autowired
- private JpaProperties jpaProperties;
-
- /**
- * 这里其实不需要配置数据库的方言.
- * 像hibernate.hbm2ddl.auto 可以在这里配置.但是我的是在application.properties中配置的.
- */
- private Map<String, Object> getVendorProperties() {
- HibernateSettings hibernateSettings = new HibernateSettings();
- return jpaProperties.getHibernateProperties(hibernateSettings);
- }
-
- /**
- * 配置EntityManagerFactory实体
- * @param builder
- * @return 实体管理工厂
- * packages 扫描@Entity注释的软件包名称
- * persistenceUnit 持久性单元的名称。 如果只建立一个EntityManagerFactory,可以省略,
- 但是如果在同一个应用程序中有多个,应该给它们不同的名字
- * properties 标准JPA或供应商特定配置的通用属性。 这些属性覆盖构造函数中提供的任何值。
- */
- @Primary
- @Bean(name = "entityManagerFactoryMysql")
- public LocalContainerEntityManagerFactoryBean entityManagerFactoryMysql(
- EntityManagerFactoryBuilder builder) {
- return builder
- .dataSource(mysqlDataSource)
- .properties(getVendorProperties())
- .packages("com.xxx.mysql")
- .persistenceUnit("mysqlPersistenceUnit")
- .build();
- }
-
- /**
- * 配置EntityManager实体
- * @param builder
- * @return 实体管理器
- */
- @Primary
- @Bean(name = "entityManagerMysql")
- public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
- return entityManagerFactoryMysql(builder).getObject().createEntityManager();
- }
-
- /**
- * 配置事务transactionManager
- * @param builder
- * @return 事务管理器
- */
- @Primary
- @Bean(name="transactionManagerMysql")
- public PlatformTransactionManager transactionManagerMysql(
- EntityManagerFactoryBuilder builder) {
- return new JpaTransactionManager(entityManagerFactoryMysql(builder).getObject());
- }
- }

- @Configuration
- @EnableTransactionManagement
- @EnableJpaRepositories(
- entityManagerFactoryRef="entityManagerFactorySqlite", //EntityManagerFactory引用
- transactionManagerRef="transactionManagerSqlite", //transactionManager引用
- basePackages={"com.xxx.sqlite"})
- public class SqliteDataSourceConfig {
- /**
- * 注入 sqlite数据源
- */
- @Resource(name="sqliteDataSource")
- private DataSource sqliteDataSource;
-
- /**
- * 注入JPA配置实体
- */
- @Autowired
- private JpaProperties jpaProperties;
-
- /**
- * 这里其实不需要配置数据库的方言.
- */
- private Map<String, Object> getVendorProperties() {
- HibernateSettings hibernateSettings=new HibernateSettings();
- return jpaProperties.getHibernateProperties(hibernateSettings);
- }
-
- /**
- * 配置EntityManagerFactory实体
- * @param builder
- * @return 实体管理工厂
- * packages 扫描@Entity注释的软件包名称
- * persistenceUnit
- * properties 标准JPA或供应商特定配置的通用属性。 这些属性覆盖构造函数中提供的任何值。
- */
- @Bean(name="entityManagerFactorySqlite")
- public LocalContainerEntityManagerFactoryBean entityManagerFactorySqlite(
- EntityManagerFactoryBuilder builder) {
- return builder
- .dataSource(sqliteDataSource)
- .properties(getVendorProperties())
- .packages("com.xxx.sqlite")
- .persistenceUnit("sqlitePersistenceUnit")
- .build();
- }
-
- /**
- * 配置EntityManager实体
- * @param builder
- * @return 实体管理器
- */
- @Bean(name="entityManagerSqlite")
- public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
- return entityManagerFactorySqlite(builder).getObject().createEntityManager();
- }
-
- /**
- * 配置事务transactionManager
- * @param builder
- * @return 事务管理器
- */
- @Bean(name="transactionManagerSqlite")
- public PlatformTransactionManager transactionManagerSqlite(EntityManagerFactoryBuilder builder) {
- return new JpaTransactionManager(entityManagerFactorySqlite(builder).getObject());
- }
- }

然后com.xxx.mysql和com.xxx.sqlite目录下就可以放各自的domain和repository了.跟单数据源没有区别.
参考:
https://www.cnblogs.com/sxdcgaq8080/p/7978205.html (springboot-1.5.9)
https://my.oschina.net/chinesedragon/blog/1647846 (springboot-2.0.0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。