同时操作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