手动配置后, 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());
}
}