sharp-database 添加多数据源

手动配置后, JdbcTemplateAutoConfiguration,将不会自动注入,所有的数据源都需要自行注入管理!!!

配置类

@Configuration
public class PostgresConfig {

    @Bean
    public TableDAO postgresTableDAO(NamedParameterJdbcTemplate postgresNamedParameterJdbcTemplate) {
        return new TableDAOImpl(postgresNamedParameterJdbcTemplate);
    }

    @Bean
    public DataSource postgresDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.postgresql.Driver");
        dataSource.setUrl("jdbc:postgresql://127.0.0.1:5432/test");
        dataSource.setUsername("postgres");
        dataSource.setPassword("123");
        return dataSource;
    }

    @Bean
    public NamedParameterJdbcTemplate postgresNamedParameterJdbcTemplate(DataSource postgresDataSource) {
        return new NamedParameterJdbcTemplate(postgresDataSource);
    }

    @Bean
    public TableGenerator postgresTableGenerator(NamedParameterJdbcTemplate postgresNamedParameterJdbcTemplate) {
        return new PostgresSQLTableGenerator(postgresNamedParameterJdbcTemplate.getJdbcTemplate());
    }
}

PostgresEntityDAOImpl.java

@FieldDefaults(level = AccessLevel.PRIVATE)
@Validated
public class PostgresEntityDAOImpl<T, ID> extends EntityDAOImpl<T, ID> {

    @Resource
    @Qualifier("postgresTableDAO")
    @Getter
    private TableDAO tableDAO;

}

测试

@SpringBootTest
public class PostgresTableDAOTest {

    @Autowired
    private TableDAO postgresTableDAO;

    @Autowired
    private ProductDAO productDAO;

    @Autowired
    private TableGenerator postgresTableGenerator;

    @Test
    public void testTableGenerator() {
        postgresTableGenerator.createTable(Product.class);
    }

    @Test
    public void testPostgresTableDAO() {
        productDAO.insert(Product.builder().code("11").description("Product A").build());
    }
}