bounty将在2天内过期。回答此问题可获得+50声望奖励。mattsmith5正在寻找来自信誉良好的来源的**答案 *。
我试图使JdbcTemplate成为一个Singleton Bean,而不是在多个存储库中调用它。
在当前的代码库中,我甚至不需要编写DataSource配置。
对于我的新代码单例配置Bean尝试,是否有一种方法可以设置JDBCTemplate,而无需通过DataSource配置?
当前编码:
@Repository
public class CustomerRepositoryImpl implements CustomerRepository {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
public CustomerRepositoryImpl(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
}
}
字符串
它将使用application.properties文件自动读取DataSource
spring.datasource.url= jdbc:sqlserver://localhost;encrypt=true;databaseName=Test
spring.datasource.username= sauser
spring.datasource.password= sauserpw
型
新代码尝试:
@Configuration
public class DatabaseConfig {
@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource dataSource)
{
return new NamedParameterJdbcTemplate(dataSource);
}
}
// trying to prevent writing this code in for Datasource if possible, and importing a new maven package com.microsoft.sqlserver.jdbc.SQLServerDataSource;
SQLServerDataSource dataSource = new SQLServerDataSource();
dataSource.setUser("sauser");
dataSource.setPassword("sauserpw");
dataSource.setServerName("localhost");
dataSource.setDatabaseName("Test");
@Repository
public class CustomerRepositoryImpl implements CustomerRepository {
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Autowired
public CustomerRepositoryImpl(DatabaseConfig databaseConfig) {
this.namedParameterJdbcTemplate = databaseConfig.namedParameterJdbcTemplate();
型
注意:没有错误,试图减少代码库并简化它
3条答案
按热度按时间ohtdti5x1#
你为什么要创建
DatabaseConfig
呢?我手头没有源代码,但你现在的代码是工作的,你得到了一个jdbc-Template注入,它是由autocobfiguration创建的(作为一个单例)。自动配置是以一种方式实现的,当满足某些条件时,它会退出,以便不干扰手动配置。
很有可能,通过自己创建jdbctemplate,jdbctemplate配置会退出。
你可以通过在调试模式下启动spring Boot 来检查这一点。你可以在那里看到选择了哪些自动配置,哪些被省略了,以及为什么。
如果你仍然想创建自己的jdbctemplate,你可以像spring Boot 一样创建jdbctemplate。在这种情况下,我看一下相应的spring Boot 源代码。例如,数据库属性加载在
DatabaseProperties
bean中。顺便说一句,你的新Repository代码是不必要的复杂。如果你有一个Configuration类,它创建了一个bean,那么默认情况下它是一个单例。如果你自动连接那个bean,你会得到单例注入。注入配置类和调用bean方法使它变得不必要的复杂。我建议你使用调试器,并在执行过程中检查对象id,看看它是如何工作的。
bbuxkriu2#
尝试导入
spring-boot-autoconfigure
包,该包将具有autowired配置文件到spring中的能力。这样您就可以使用带有上面autowired注解的JdbcTemplate
eulz3vhy3#
您可以直接使用JdbcTemplate并将其作为bean注入,spring将自动处理一切。由于在您的情况下,您只需要连接单个数据源,提到强制依赖项和相关属性,将JdbcTemplate声明为bean将解决所有问题。
字符串
这将是你的JdbcConfig。注意:你不需要JdbcConfig类,你可以直接在你的应用程序的配置中初始化JdbcTemplate bean。
在项目中包含
spring-boot-starter-data-jpa
依赖项。您可以通过以下方式在存储库中使用此bean。
型
希望这能解决你的问题。