spring boot同时操作10个以上数据库疯狂的CRUD

同时操作10个以上数据库的经历大家都感兴趣吧,下面演示一下是怎么做到的

1、我把所有的数据库配置信息都放在了application.properties文件中:

#dataSourceName_001
usercrsud.spring.datasource.url=jdbc:mysql://192.168.0.1:3306/dataSourceName_001?characterEncoding=utf-8&useSSL=false
usercrsud.spring.datasource.username=root
usercrsud.spring.datasource.password=root
usercrsud.spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##属性设置
usercrsud.spring.datasource.initialSize=5
usercrsud.spring.datasource.minIdle=5
usercrsud.spring.datasource.maxIdle=20
usercrsud.spring.datasource.maxActive=20
usercrsud.spring.datasource.maxWait=600000
#空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟
usercrsud.spring.datasource.timeBetweenEvictionRunsMillis=600000
#连接池空闲连接的有效时间 ,设置30分钟
usercrsud.spring.datasource.minEvictableIdleTimeMillis=300000
usercrsud.spring.datasource.validationQuery=SELECT 1 FROM DUAL
usercrsud.spring.datasource.testWhileIdle=true
usercrsud.spring.datasource.testOnBorrow=true
usercrsud.spring.datasource.testOnReturn=true
usercrsud.spring.datasource.poolPreparedStatements=true
usercrsud.spring.datasource.maxPoolPreparedStatementPerConnectionSize=130


#dataSourceName_003
jncrsud.spring.datasource.url=jdbc:mysql://192.168.0.1:3306/dataSourceName_002?characterEncoding=utf-8&useSSL=false
jncrsud.spring.datasource.username=root
jncrsud.spring.datasource.password=root
jncrsud.spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##属性设置
jncrsud.spring.datasource.initialSize=5
jncrsud.spring.datasource.minIdle=5
jncrsud.spring.datasource.maxIdle=20
jncrsud.spring.datasource.maxActive=20
jncrsud.spring.datasource.maxWait=600000
#空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟
jncrsud.spring.datasource.timeBetweenEvictionRunsMillis=600000
#连接池空闲连接的有效时间 ,设置30分钟
jncrsud.spring.datasource.minEvictableIdleTimeMillis=300000
jncrsud.spring.datasource.validationQuery=SELECT 1 FROM DUAL
jncrsud.spring.datasource.testWhileIdle=true
jncrsud.spring.datasource.testOnBorrow=true
jncrsud.spring.datasource.testOnReturn=true
jncrsud.spring.datasource.poolPreparedStatements=true
jncrsud.spring.datasource.maxPoolPreparedStatementPerConnectionSize=130


#dataSourceName_003
lacrsud.spring.datasource.url=jdbc:mysql://192.168.0.1:3306/dataSourceName_003?characterEncoding=utf-8&useSSL=false
lacrsud.spring.datasource.username=root
lacrsud.spring.datasource.password=root
lacrsud.spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##属性设置
lacrsud.spring.datasource.initialSize=5
lacrsud.spring.datasource.minIdle=5
lacrsud.spring.datasource.maxIdle=20
lacrsud.spring.datasource.maxActive=20
lacrsud.spring.datasource.maxWait=600000
#空闲连接回收的时间间隔,与test-while-idle一起使用,设置5分钟
lacrsud.spring.datasource.timeBetweenEvictionRunsMillis=600000
#连接池空闲连接的有效时间 ,设置30分钟
lacrsud.spring.datasource.minEvictableIdleTimeMillis=300000
lacrsud.spring.datasource.validationQuery=SELECT 1 FROM DUAL
lacrsud.spring.datasource.testWhileIdle=true
lacrsud.spring.datasource.testOnBorrow=true
lacrsud.spring.datasource.testOnReturn=true
lacrsud.spring.datasource.poolPreparedStatements=true
lacrsud.spring.datasource.maxPoolPreparedStatementPerConnectionSize=130

这里只列出了三个数据库的配置,10个乃至更多都按照上面写法即可,用前缀来区分每个库

2、声明一个配置类,装载不同的数据源

/**
 * 多数据源装载配置类
 * 数据源的声明
 */
@Configuration
public class DataSourceConfig {

    /**
     * @return  dataSourceName_001
     */
    @Bean(name = "userDataSource")
    @Qualifier(value = "userDataSource")
    @ConfigurationProperties(prefix = "usercrsud.spring.datasource")
    public DataSource userDataSource(){
        return DataSourceBuilder.create().build();
    }
    /**
     * @return  dataSourceName_002
     */
    @Bean(name = "laDataSource")
    @Qualifier(value = "laDataSource")  //spring装配bean的唯一标识
    @ConfigurationProperties(prefix = "lacrsud.spring.datasource")   //application.properties配置文件中该数据源的配置前缀
    public DataSource laDataSource(){
        return DataSourceBuilder.create().build();
    }

    /**
     * @return dataSourceName_003
     */
    @Primary    //配置该数据源为主数据源
    @Bean(name = "jnDataSource")
    @Qualifier(value = "jnDataSource")
    @ConfigurationProperties(prefix = "jncrsud.spring.datasource")
    public DataSource jnDataSource(){
        return DataSourceBuilder.create().build();
    }
}

@Primary 作为主数据库

3、为每一个源声明装载,设置方言的执行策略,事务管理

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryUser",   //实体管理引用
        transactionManagerRef = "transactionManagerUser",                     //事务管理引用
        basePackages = {"com.cauto.usercrsud"})
public class UserDataSourceConfig {


    /**
     * 注入 数据源
     */
    @Autowired()
    @Qualifier("userDataSource")
    private DataSource userDataSource;

    /**
     * 注入JPA配置实体
     */
    @Autowired
    private JpaProperties jpaProperties;

    private Map<String, String> getVendorProperties(DataSource dataSource) {
        jpaProperties.setDatabase(Database.MYSQL);
        Map<String,String> map = new HashMap<>();
        map.put("hibernate.dialect","org.hibernate.dialect.MySQL5Dialect");
        map.put("hibernate.hbm2ddl.auto","update");
        map.put("hibernate.physical_naming_strategy","org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl");
        jpaProperties.setProperties(map);
        return jpaProperties.getHibernateProperties(dataSource);
    }

    @Bean(name = "entityManagerFactoryUser")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryUser(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(userDataSource)
                .properties(getVendorProperties(userDataSource))
                .packages(new String[]{"com.cauto.usercrsud"})
                .persistenceUnit("userPersistenceUnit")
                .build();
    }

    /**
     * 配置EntityManager实体
     *
     * @param builder
     * @return 实体管理器
     */
    @Bean(name = "entityManagerUser")
    public EntityManager entityManagerUser(EntityManagerFactoryBuilder builder) {
        return entityManagerFactoryUser(builder).getObject().createEntityManager();
    }


    /**
     * 配置事务
     *
     * @param builder
     * @return 事务管理器
     */
    @Bean(name = "transactionManagerUser")
    public PlatformTransactionManager transactionManagerUser(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactoryUser(builder).getObject());
    }
}

----

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryJn",  
        transactionManagerRef = "transactionManagerJn",     
        basePackages = {"com.cauto.jncrsud"})                      
public class JnDataSourceConfig {

        /**
         * 注入数据源
         */
        @Autowired()
        @Qualifier("jnDataSource")
        private DataSource jnDataSource;

        /**
         * 注入JPA配置实体
         */
        @Autowired
        private JpaProperties jpaProperties;

        private Map<String,String> getVendorProperties(DataSource dataSource){
            jpaProperties.setDatabase(Database.MYSQL);
            Map<String,String> map = new HashMap<>();
            map.put("hibernate.dialect","org.hibernate.dialect.MySQL5Dialect");
            map.put("hibernate.hbm2ddl.auto","update");
            map.put("hibernate.physical_naming_strategy","org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl");
            jpaProperties.setProperties(map);
            return  jpaProperties.getHibernateProperties(dataSource);
        }

        /**
         * 配置EntityManagerFactory实体
         */
        @Primary
        @Bean(name = "entityManagerFactoryJn")
        public LocalContainerEntityManagerFactoryBean entityManagerFactoryJn(EntityManagerFactoryBuilder builder){
            return builder
                    .dataSource(jnDataSource)
                    .properties(getVendorProperties(jnDataSource))
                    .packages(new String[]{"com.cauto.jncrsud"})
                    .persistenceUnit("jnPersistenceUnit")
                    .build();
        }

        /**
         * 配置EntityManager实体
         * @param builder
         * @return      实体管理器
         */
        @Primary
        @Bean(name = "entityManagerJn")
        public EntityManager entityManagerJn(EntityManagerFactoryBuilder builder){
            return entityManagerFactoryJn(builder).getObject().createEntityManager();
        }


        /**
         * 配置事务transactionManager
         * @param builder
         * @return      事务管理器
         */
        @Primary
        @Bean(name = "transactionManagerJn")
        public PlatformTransactionManager transactionManagerJn(EntityManagerFactoryBuilder builder){
            return  new JpaTransactionManager(entityManagerFactoryJn(builder).getObject());
        }


}

---另外一个就不写了

4、entity

package com.cauto.usercrsud.entity;

import javax.persistence.*;

@Entity
@Table(name="bike_crsud_user")
public class BikeCrsudUser {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="user_id")
    private Integer userId;

    @Column(name="user_name")
    private String userName;

    @Column(name="password")
    private String password;

    @Column(name="create_time")
    private String createTime;

    @Column(name="update_time")
    private String updateTime;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName == null ? null : userName.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime == null ? null : createTime.trim();
    }

    public String getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(String updateTime) {
        this.updateTime = updateTime == null ? null : updateTime.trim();
    }
}

5、Repostory

public interface BikeCrsudUserRepository extends JpaRepository<BikeCrsudUser,Integer> {

    @Query(value = "select * from bike_crsud_user where user_name =?",nativeQuery = true)
    public BikeCrsudUser findBikeCrsudUserByUserName(String userName);

}

6、CRUD

@RestController
public class UserController {
@Resource
private BikeCrsudUserRepository bikeCrsudUserRepository;
@RequestMapping(value = "/loginLock",method = RequestMethod.POST)
public Result loginLock(String password){
    Result result = new Result();
    BikeCrsudUser bikeCrsudUser = null;
    try {
        bikeCrsudUser =  bikeCrsudUserRepository.findBikeCrsudUserByUserName("admin");
    }catch (Exception e ){
        result.setCode("501");
        result.setMessage("连接超时!");
        return result;
    }
    if(bikeCrsudUser==null){
        result.setCode("404");
        result.setMessage("该用户名不存在");
    }
    return result;
}
}

有什么问题可以进群咨询:244284555

猜你喜欢

转载自blog.csdn.net/qq_28524127/article/details/87721521