springboot 项目在主程序中,指定依赖项目的数据源
时间: 2023-12-16 13:06:46 浏览: 28
可以在 Spring Boot 主程序中使用 `@Configuration` 注解定义一个配置类,然后使用 `@Bean` 注解定义数据源 Bean,最后使用 `@Primary` 注解指定该数据源为默认数据源。示例代码如下:
```java
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "datasource.dependency")
@Primary
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
```
上述示例中,`@ConfigurationProperties` 注解用来指定数据源的配置前缀,例如 `datasource.dependency`,这样 Spring Boot 在启动时会自动读取该前缀的配置,然后将其注入到 `DataSource` 对象中。`@Primary` 注解用来指定该数据源为默认数据源,即当多个数据源存在时,该数据源会被优先选择。
相关问题
springboot项目作为依赖引入主程序;主程序使用单数据源,依赖项目使用多数据源
在这种情况下,主程序使用单数据源,而依赖项目需要使用多数据源,可以通过以下步骤来实现:
1. 在依赖项目中,定义多个数据源的配置类。例如:
```java
@Configuration
public class DataSourceConfig1 {
@Bean
@ConfigurationProperties("datasource1")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
}
@Configuration
public class DataSourceConfig2 {
@Bean
@ConfigurationProperties("datasource2")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
}
```
上述代码中,定义了两个数据源的配置类,分别为 `DataSourceConfig1` 和 `DataSourceConfig2`,每个配置类中都定义了一个 `DataSource` Bean,并指定了对应的配置前缀。
2. 在依赖项目中,使用 `@Qualifier` 注解来指定具体的数据源。例如:
```java
@Service
public class MyService {
@Autowired
@Qualifier("dataSource1")
private DataSource dataSource1;
@Autowired
@Qualifier("dataSource2")
private DataSource dataSource2;
// ...
}
```
上述代码中,使用 `@Autowired` 注解将两个数据源分别注入到 `dataSource1` 和 `dataSource2` 变量中,并使用 `@Qualifier` 注解来指定具体的数据源。
3. 在主程序中,定义单数据源的配置类。例如:
```java
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties("datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
```
上述代码中,定义了一个数据源的配置类 `DataSourceConfig`,并定义了一个 `DataSource` Bean,并指定了对应的配置前缀。
4. 在主程序中,将依赖项目的多数据源配置类排除在外,并将单数据源的配置类引入。例如:
```java
@SpringBootApplication(exclude = {DataSourceConfig1.class, DataSourceConfig2.class})
@Import(DataSourceConfig.class)
public class MainApplication {
// ...
}
```
上述代码中,使用 `@SpringBootApplication` 注解的 `exclude` 属性将依赖项目的多数据源配置类排除在外,同时使用 `@Import` 注解将单数据源的配置类引入。
这样,就可以实现在主程序中使用单数据源,而在依赖项目中使用多数据源的功能。
帮我写一个完整的springboot多数据源配置的项目
好的,下面是一个完整的Spring Boot多数据源配置的项目:
1. 创建一个Spring Boot项目
使用Spring Initializr创建一个新的Spring Boot项目,包括Web、JPA和MySQL依赖。
2. 添加多数据源配置
在application.properties文件中添加以下配置:
# 主数据源配置
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
# 从数据源配置
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
3. 创建数据源和JdbcTemplate
在应用程序中创建两个数据源,一个主数据源和一个从数据源,并为它们创建JdbcTemplate对象。可以在配置类中完成这些操作:
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "primaryJdbcTemplate")
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. 创建实体和Repository
创建两个实体类和对应的Repository接口,一个用于主数据源,一个用于从数据源。
@Entity
@Table(name = "primary_table")
public class PrimaryEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 省略getter和setter方法
}
@Entity
@Table(name = "secondary_table")
public class SecondaryEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 省略getter和setter方法
}
@Repository
public interface PrimaryRepository extends JpaRepository<PrimaryEntity, Long> {
}
@Repository
public interface SecondaryRepository extends JpaRepository<SecondaryEntity, Long> {
}
5. 创建Controller
创建一个Controller类,注入两个JdbcTemplate和两个Repository,分别处理主数据源和从数据源的请求。
@RestController
public class TestController {
@Autowired
private JdbcTemplate primaryJdbcTemplate;
@Autowired
private JdbcTemplate secondaryJdbcTemplate;
@Autowired
private PrimaryRepository primaryRepository;
@Autowired
private SecondaryRepository secondaryRepository;
@GetMapping("/primary")
public List<PrimaryEntity> getPrimaryData() {
return primaryRepository.findAll();
}
@GetMapping("/secondary")
public List<SecondaryEntity> getSecondaryData() {
return secondaryRepository.findAll();
}
@GetMapping("/primary/jdbc")
public List<Map<String, Object>> getPrimaryDataJdbc() {
return primaryJdbcTemplate.queryForList("SELECT * FROM primary_table");
}
@GetMapping("/secondary/jdbc")
public List<Map<String, Object>> getSecondaryDataJdbc() {
return secondaryJdbcTemplate.queryForList("SELECT * FROM secondary_table");
}
}
6. 运行项目
运行Spring Boot项目,访问以下URL可以查看主数据源和从数据源的数据。
http://localhost:8080/primary
http://localhost:8080/secondary
访问以下URL可以使用JdbcTemplate查看主数据源和从数据源的数据。
http://localhost:8080/primary/jdbc
http://localhost:8080/secondary/jdbc
这样就完成了一个完整的Spring Boot多数据源配置的项目。