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
原创粉丝点击