下面是关于Springboot2.0配置JPA多数据源连接两个mysql数据库的完整攻略:
1. 配置application.properties文件
在application.properties文件中配置两个数据源的连接信息,如下所示:
#第一个数据源
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost/test1?useUnicode=true&character-encoding=UTF-8
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.initialSize=10
spring.datasource.test1.maxActive=100
spring.datasource.test1.maxWait=10000
#第二个数据源
spring.datasource.test2.jdbc-url=jdbc:mysql://localhost/test2?useUnicode=true&character-encoding=UTF-8
spring.datasource.test2.username=root
spring.datasource.test2.password=root
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test2.initialSize=10
spring.datasource.test2.maxActive=100
spring.datasource.test2.maxWait=10000
在上面的配置中分别配置了两个数据源,其中test1和test2是数据源的名称,jdbc-url、username、password等参数分别对应数据库连接的地址、用户名、密码等。在这里,我们使用的是mysql数据库。需要注意的是,如果你使用的是其他数据库,则可能需要更改一些配置参数(如驱动类名等)。
2. 配置数据源
在Springboot2.0版本中,可以使用@Configuration和@Bean注解将数据源配置成一个Bean,如下所示:
@Configuration
public class DataSourceConfig {
@Bean(name = "test1DataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.test1")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix="spring.datasource.test2")
public DataSource logDataSource() {
return DataSourceBuilder.create().build();
}
}
在上面的配置中,我们使用了@Configuration注解将这个配置类声明为一个Java配置类,并使用@Bean注解将数据源配置成了一个Bean。需要注意的是,我们在配置test1DataSource的时候使用了@Primary注解,表示如果系统中有多个数据源,则默认使用test1DataSource数据源。
3. 配置JPA
在Springboot2.0版本中,可以使用@Qualifier注解将不同的数据源注入到不同的EntityManagerFactoryBean中,如下所示:
@Configuration
@EnableJpaRepositories(
entityManagerFactoryRef = "test1EntityManagerFactory",
transactionManagerRef = "test1TransactionManager",
basePackages = {"com.example.demo.dao.test1"}) //设置Repository所在位置
public class Test1JPAConfig {
@Primary
@Bean(name = "test1EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("test1DataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.demo.entity.test1") //设置实体类所在位置
.persistenceUnit("test1PersistenceUnit")
.build();
}
@Primary
@Bean(name = "test1TransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("test1EntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
在上面的配置中,我们使用@EnableJpaRepositories注解来启用JPA仓库,并使用@Qualifier注解将test1DataSource注入到test1EntityManagerFactory中,从而实现使用test1DataSource连接test1数据库。
同样地,我们配置test2的JPA实体管理器:
@Configuration
@EnableJpaRepositories(
entityManagerFactoryRef = "test2EntityManagerFactory",
transactionManagerRef = "test2TransactionManager",
basePackages = {"com.example.demo.dao.test2"}) //设置Repository所在位置
public class Test2JPAConfig {
@Bean(name = "test2EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("test2DataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.demo.entity.test2") //设置实体类所在位置
.persistenceUnit("test2PersistenceUnit")
.build();
}
@Bean(name = "test2TransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("test2EntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
需要注意的是,由于我们在两个配置类中都使用了@Primary注解,因此如果你在使用JPA时没有指定数据源的话,则会默认使用test1DataSource数据源。
4. 完善Controller类
现在我们已经配置好了数据源和JPA实体管理器,下面我们需要编写Controller类来实现对两个数据库的访问。下面是对test1数据源的访问示例:
@RestController
@RequestMapping("/test1")
public class Test1Controller {
@Autowired
@Qualifier("test1EntityManagerFactory")
private EntityManager entityManager;
@GetMapping("/list")
public List<Test1> list() {
TypedQuery<Test1> query = entityManager.createQuery("select t from Test1 t", Test1.class);
return query.getResultList();
}
}
在上面的Controller类中,我们使用了@Autowired注解将test1DataSource注入到了entityManager中,并通过查询语句来查询数据库中的信息。
同样地,我们编写对test2数据源的访问示例:
@RestController
@RequestMapping("/test2")
public class Test2Controller {
@Autowired
@Qualifier("test2EntityManagerFactory")
private EntityManager entityManager;
@GetMapping("/list")
public List<Test2> list() {
TypedQuery<Test2> query = entityManager.createQuery("select t from Test2 t", Test2.class);
return query.getResultList();
}
}
这里我们通过@Autowired注解将test2DataSource注入到了entityManager中,并使用查询语句来查询数据库中的信息。
至此,Springboot2.0配置JPA多数据源连接两个mysql数据库的攻略就完成了,两条示例分别演示了对两个数据源的访问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot2.0配置JPA多数据源连接两个mysql数据库方式 - Python技术站