@Primary @Bean(name = "mysqlPs90DataSource") @Qualifier("mysqlPs90DataSource") @ConfigurationProperties(prefix = "spring.mysql-ps90.datasource") public DataSource mysqlPs90DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "mssqlDataSource") @Qualifier("mssqlDataSource") @ConfigurationProperties(prefix = "spring.mssql.datasource") public DataSource mssqlDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "iobd2DataSource") @Qualifier("iobd2DataSource") @ConfigurationProperties(prefix = "spring.iobd2.datasource") public DataSource iobd2DataSource() { return DataSourceBuilder.create().build(); }
时间: 2024-02-22 11:01:28 浏览: 98
这段代码是在Spring Boot应用程序中创建三个数据源的配置。@Bean注释告诉Spring容器需要实例化这些对象并作为bean进行管理。@Primary注释指定了默认的数据源,如果有多个数据源的话,那么默认会使用该注释的数据源。@Qualifier注释用于指定bean的名称。@ConfigurationProperties注释用于从application.properties文件中读取相关配置属性。在这个例子中,我们使用了三个不同的前缀来指定不同的数据源配置属性。最后,每个数据源都通过调用DataSourceBuilder.create().build()方法来创建并返回。
相关问题
springboot集成dynamic-datasource
在Spring Boot中集成dynamic-datasource可以帮助我们实现动态数据源切换的功能。面是一些基本步骤:
1. 添加依赖:在pom.xml文件中添加dynamic-datasource的依赖。
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>latest-version</version>
</dependency>
```
2. 配置数据源:在application.properties或application.yml文件中配置数据源信息。
```properties
# 数据源1
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/db1
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=123456
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.jdbc.Driver
# 数据源2
spring.datasource.dynamic.datasource.slave.url=jdbc:mysql://localhost:3306/db2
spring.datasource.dynamic.datasource.slave.username=root
spring.datasource.dynamic.datasource.slave.password=123456
spring.datasource.dynamic.datasource.slave.driver-class-name=com.mysql.jdbc.Driver
```
3. 配置动态数据源:创建一个配置类,用于配置动态数据源。
```java
@Configuration
public class DynamicDataSourceConfig {
@Primary
@Bean("dynamicDataSource")
@ConfigurationProperties(prefix = "spring.datasource.dynamic")
public DataSource dynamicDataSource() {
return new DruidDataSource();
}
@Bean
public DataSourceTransactionManager transactionManager(@Qualifier("dynamicDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SqlSessionFactory sqlSessionFactory(@Qualifier("dynamicDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
return sessionFactory.getObject();
}
}
```
4. 使用动态数据源:在需要使用数据源的地方,通过注解`@DS`指定数据源。
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
@DS("master") // 使用master数据源
public List<User> getMasterUsers() {
return userMapper.getUsers();
hibernate mysql datasource_springboot2.0.3使用jpa和hibernate的方式配置多数据源(sqlite和mysql)...
首先需要在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.30.1</version>
</dependency>
```
然后配置application.yml文件,如下所示:
```yaml
spring:
datasource:
mysql:
url: jdbc:mysql://localhost:3306/mysql_db?useUnicode=true&characterEncoding=utf-8&useSSL=false
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
sqlite:
url: jdbc:sqlite:/data/sqlite_db.db
driver-class-name: org.sqlite.JDBC
username: root
password: root
jpa:
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
```
接下来需要创建两个数据源的配置类,分别为MysqlConfig和SqliteConfig,代码如下所示:
```java
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "mysqlEntityManagerFactory",
transactionManagerRef = "mysqlTransactionManager",
basePackages = {"com.example.mysql.repository"})
public class MysqlConfig {
@Primary
@Bean(name = "mysqlDataSource")
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "mysqlEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
@Qualifier("mysqlDataSource") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.example.mysql.entity").persistenceUnit("mysql")
.build();
}
@Primary
@Bean(name = "mysqlTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("mysqlEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
```
```java
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "sqliteEntityManagerFactory",
transactionManagerRef = "sqliteTransactionManager",
basePackages = {"com.example.sqlite.repository"})
public class SqliteConfig {
@Bean(name = "sqliteDataSource")
@ConfigurationProperties(prefix = "spring.datasource.sqlite")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqliteEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
@Qualifier("sqliteDataSource") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.example.sqlite.entity").persistenceUnit("sqlite")
.build();
}
@Bean(name = "sqliteTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("sqliteEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
```
注意事项:
1. 在MysqlConfig和SqliteConfig中需要使用`@EnableJpaRepositories`注解来指定数据源的repository所在包。
2. 在MysqlConfig和SqliteConfig中创建的EntityManagerFactory和TransactionManager需要使用`@Primary`注解来标识默认数据源。
3. application.yml中的`hibernate.dialect`需要根据不同的数据库进行修改。
4. 在repository中需要使用`@Qualifier`注解来指定使用的数据源。
使用多数据源时,需要在service或controller中使用`@Transactional("mysqlTransactionManager")`或`@Transactional("sqliteTransactionManager")`注解来指定使用的数据源。
至此,一个使用JPA和Hibernate配置多数据源的示例就完成了。
阅读全文