SpringBoot实现多数据源配置
来源:互联网 发布:风水择日秘诀软件 编辑:程序博客网 时间:2024/06/05 15:33
SpringBoot实现多数据源配置
springBoot实现多数据源配置,首先在application.properties 中配置两个数据源
spring.datasource.primary.url=jdbc:mysql://localhost:3306/test1spring.datasource.primary.username=rootspring.datasource.primary.password=rootspring.datasource.primary.driver-class-name=com.mysql.jdbc.Driverspring.datasource.secondary.url=jdbc:mysql://localhost:3306/test2spring.datasource.secondary.username=rootspring.datasource.secondary.password=rootspring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver
需要有两个DataSource来读取application.properties的不同配置。
@Configuration public class DataSourceConfig{ @Bean(name = "primaryDataSource") @Qualifier("primaryDataSource") @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(); } }
JdbcTemplate 支持
在springBoot中对JdbcTemplate的支持比较简单,只需要为其注入对应的datasource即可
@Bean(name = "primaryJdbcTemplate") 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); }
这样配置便将不同的数据源配置到不同的JdbcTemplate中了,使用时运用@Autowired注解搭配@Qualifier即可
public class TemplateService{ @Autowired @Qualifier("primaryJdbcTemplate") private JdbcTemplate primaryJdbaTemplate }
JPA 支持
jpa支持的多数据源配置,对于DataSource 的配置如上方JdbcTemplate 所示相同,并且对每一个JPA配置都要搭配一个配置类,在类中需要注意书写正确数据源对应的Entity实体类和Repository
/** * @Author:高键城 * @time: * @Discription:Jpa对资源的配置 */@Configuration@EnableTransactionManagement@EnableJpaRepositories( entityManagerFactoryRef = "entityManagerFactoryPrimary", transactionManagerRef = "transactionManagerPrimary", basePackages = {"com.gaojiancheng.demo.repository"} //设置repository所在位置)public class PrimaryConfig { @Autowired @Qualifier("primaryDataSource") //将前面配置好的PrimaryDataSource 注入到这里 private DataSource primaryDataSource; @Autowired private JpaProperties jpaProperties;//实体类管理器,并作为一个Bean,名称为entityManagerPrimary @Primary @Bean(name = "entityManagerPrimary") public EntityManager entityManager(EntityManagerFactoryBuilder builder){ return entityManagerFactoryBean(builder).getObject().createEntityManager(); } @Primary @Bean(name = "entityManagerFactoryPrimary") public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder){ return builder.dataSource(primaryDataSource) .properties(getVendorProperties(primaryDataSource)) .packages("com.gaojiancheng.demo.model") //设置实体类所在位置 .persistenceUnit("primaryPersistenceUnit") .build(); } private Map<String , String> getVendorProperties(DataSource dataSource){ return jpaProperties.getHibernateProperties(dataSource); } @Primary @Bean(name = "transactionManagerPrimary") public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder){ return new JpaTransactionManager(entityManagerFactoryBean(builder).getObject()); }}
要注意的就是书写正确实体类和repository的位置,按照上面的内容书写号实体类管理器等内容。
配置第二个数据源的时候,不同的就是DataSource 注入的名称,从PrimaryDataSource 改为 SecondaryDataSource
接下来编写实体类的信息
/***实体类User*/@Entitypublic class User { @Id @GeneratedValue private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer age; public User(){} public User(String name, Integer age) { this.name = name; this.age = age; } // 省略getter、setter}
编写对应的Repository
@Repositorypublic interface UserRepository extends JpaRepository<User, Long> {}
最后我们用Junit来进行测试
@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(Application.class)public class ApplicationTests { @Autowired private UserRepository userRepository; @Autowired private MessageRepository messageRepository; @Test public void test() throws Exception { userRepository.save(new User("aaa", 10)); userRepository.save(new User("bbb", 20)); userRepository.save(new User("ccc", 30)); userRepository.save(new User("ddd", 40)); userRepository.save(new User("eee", 50)); Assert.assertEquals(5, userRepository.findAll().size()); } }
阅读全文
0 0
- SpringBoot实现多数据源配置
- springboot 配置多数据源
- springboot 配置多数据源
- springboot 多数据源配置
- Springboot 多数据源配置
- SpringBoot配置多数据源
- SpringBoot之MyBatis多数据源配置实现
- springboot的多数据源配置
- SpringBoot、MyBatis配置多数据源
- springboot下配置多数据源
- SpringBoot的多数据源配置
- springboot+mybatis配置多数据源
- SpringBoot多数据源及事务配置
- Springboot配置Mybatis多数据源
- springBoot+mybatis多数据源的配置
- SpringBoot下配置Mybatis多数据源
- springboot下springdatajpa配置多数据源
- SpringBoot多数据源配置事务
- 《Spark大数据处理:技术、应用与性能优化》【PDF】
- java线程死锁例子及解决方法
- C
- mfc listctrl控件自动排序
- Serverless会是一场云计算的革命吗
- SpringBoot实现多数据源配置
- Javascript中对正则表达式的应用
- C++类内成员初始化
- Codeforces Round #449 (Div. 2). C. Nephren gives a riddle
- Delaunay三角网格生成
- JVM 堆内存设置原理
- Codeforces Round #449 (Div. 2) B. Chtholly's request (思维
- MySql 5.7.20安装(Win10系统)
- 【多线程】-创建线程