sping boot多数据源配置_JdbcTemplate+sping data jpa
来源:互联网 发布:淘宝客推广专区 编辑:程序博客网 时间:2024/05/17 19:58
说明
使用sping boot配置多数据源是比较简单的,在此总结下自己在配置多数据源的步骤【在网上查阅了一些资料,借鉴了下前辈们的总结,如果雷同请见谅,只为经验共享,帮助有需要的同学少走些弯路,以此共勉】。
多数据源配置步骤
废话少说直接上实例
1、 创建一个spring boot工程,我用的是sts创建的,步骤非常简单在此不在赘述。
2. 配置application.properties
server.context-path=/mutiserver.port=8080server.tomcat.uri-encoding=UTF-8spring.thymeleaf.cache=falsespring.datasource.primary.driver-class-name=com.mysql.jdbc.Driverspring.datasource.primary.url = jdbc:mysql://localhost:3306/testspring.datasource.primary.username = rootspring.datasource.primary.password = rootspring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driverspring.datasource.secondary.url = jdbc:mysql://localhost:3306/test2spring.datasource.secondary.username = rootspring.datasource.secondary.password = root
3. 创建多数据源配置类
package com.trs.datasource;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.jdbc.core.JdbcTemplate;/** * * @author liao * @Primary注解的说明请参考 http://blog.csdn.net/liaoguolingxian/article/details/70176666 * */@Configurationpublic class DateSourceConig { @Bean(name = "primaryDataSource") @Qualifier("primaryDataSource") @Primary @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "secondaryDataSource") @Qualifier("secondaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "primaryJdbcTemplate") @Primary public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource")DataSource dataSource){ return new JdbcTemplate(dataSource); } @Bean(name = "secondaryJdbcTemplate") public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource")DataSource dataSource){ return new JdbcTemplate(dataSource); }}
4. 创建测试控制器
package com.trs.controller;import java.util.Arrays;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/api/")public class apiController { @Autowired @Qualifier("primaryJdbcTemplate") JdbcTemplate jdbcTemplate1; @Autowired @Qualifier("secondaryJdbcTemplate") JdbcTemplate jdbcTemplate2; @RequestMapping("user1") public String getUserInfo1(){ List<Map<String,Object>> list = jdbcTemplate1.queryForList("select * from user"); return Arrays.asList(list).toString(); } @RequestMapping("user2") public List<Map<String,Object>> getUserInfo2(){ List<Map<String,Object>> list = jdbcTemplate2.queryForList("select * from user"); return list; }}
5、JdbcTemplate测试结果
6、Primary jpa配置
在前五步的基础上配置sping data jpa
package com.trs.jpaconfig;import java.util.Map;import javax.persistence.EntityManager;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.data.jpa.repository.config.EnableJpaRepositories;import org.springframework.orm.jpa.JpaTransactionManager;import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.data.jpa.repository.config.EnableJpaRepositories;import org.springframework.orm.jpa.JpaTransactionManager;import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;import javax.sql.DataSource;import java.util.Map;@Configuration@EnableTransactionManagement@EnableJpaRepositories( entityManagerFactoryRef="entityManagerFactoryPrimary", transactionManagerRef="transactionManagerPrimary", basePackages= { "com.trs.primary" }) //设置Repository所在位置public class PrimaryConfig { @Autowired @Qualifier("primaryDataSource") private DataSource primaryDataSource; @Primary @Bean(name = "entityManagerPrimary") public EntityManager entityManager(EntityManagerFactoryBuilder builder) { return entityManagerFactoryPrimary(builder).getObject().createEntityManager(); } @Primary @Bean(name = "entityManagerFactoryPrimary") public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) { return builder .dataSource(primaryDataSource) .properties(getVendorProperties(primaryDataSource)) .packages("com.trs.primary") //设置实体类所在位置 .persistenceUnit("primaryPersistenceUnit") .build(); } @Autowired private JpaProperties jpaProperties; private Map<String, String> getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource); } @Primary @Bean(name = "transactionManagerPrimary") public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject()); }}
6、second jpa配置
package com.trs.jpaconfig;import java.util.Map;import javax.persistence.EntityManager;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.data.jpa.repository.config.EnableJpaRepositories;import org.springframework.orm.jpa.JpaTransactionManager;import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.jpa.repository.config.EnableJpaRepositories;import org.springframework.orm.jpa.JpaTransactionManager;import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;import javax.sql.DataSource;import java.util.Map;@Configuration@EnableTransactionManagement@EnableJpaRepositories( entityManagerFactoryRef="entityManagerFactorySecondary", transactionManagerRef="transactionManagerSecondary", basePackages= { "com.trs.second" }) //设置Repository所在位置public class SecondConfig { @Autowired @Qualifier("secondaryDataSource") private DataSource secondaryDataSource; @Bean(name = "entityManagerSecondary") public EntityManager entityManager(EntityManagerFactoryBuilder builder) { return entityManagerFactorySecondary(builder).getObject().createEntityManager(); } @Bean(name = "entityManagerFactorySecondary") public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) { return builder .dataSource(secondaryDataSource) .properties(getVendorProperties(secondaryDataSource)) .packages("com.trs.second") //设置实体类所在位置 .persistenceUnit("secondaryPersistenceUnit") .build(); } @Autowired private JpaProperties jpaProperties; private Map<String, String> getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource); } @Bean(name = "transactionManagerSecondary") PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject()); }}
6、实体、dao创建
实体
DAO
7、测试Controller
@Autowired private PrimaryUserDao primaryUserDao; @Autowired private SecondUserDao secondUserDao; @RequestMapping("user3") public Object getUserInfo3(){ return primaryUserDao.findOne(1L); } @RequestMapping("user4") public Object getUserInfo4(){ return secondUserDao.findOne(1L); }
7、测试结果
整体代码结构:
源代码地址:
https://github.com/1522140840/mutiDatesource
1 0
- sping boot多数据源配置_JdbcTemplate+sping data jpa
- sping 多数据源配置
- Spring Boot + Spring Data JPA项目配置多数据源
- spring-boot 使用 spring-data-jpa多数据源配置
- Spring Boot,Spring Data JPA多数据源支持配置
- sping data
- Sping Data Jpa 一对多单向映射
- spring data jpa 配置多数据源
- sping多数据源的动态切换和更新
- 基于Spring Boot与Spring Data JPA的多数据源配置
- Spring Boot学习(七)之Web应用使用Spring-data-jpa多数据源配置
- Spring Boot,Spring Data JPA多数据源支持
- Sping
- Sping集成JPA
- sping boot demo解释
- intellij+gradle+sping boot
- sping boot配置文件详解
- Sping-Boot 单元测试
- 微信小程序聊天系统搭建文档
- threejs 教程例子 demo
- [RK3288][Android6.0] 调试笔记 --- user版本固件升级无法开机问题
- springMVC学习
- mysql 通配符
- sping boot多数据源配置_JdbcTemplate+sping data jpa
- Codeforces C. Arpa’s overnight party and Mehrdad’s silent entering
- 动态创建表格
- 比teamviewer更屌的远程软件,程序员莫错过
- quota设置用户磁盘空间限额
- phonegap应用到studio,并用studio开发
- linux 安装memcached
- sql server 多数据批量发送邮件
- Android Studio:如何使用Android Studio与夜神模拟器开发调试