数据源是否需要在spring jdbc中的原型范围内

时间:2017-02-25 13:00:36

标签: java spring spring-mvc spring-jdbc jdbctemplate

当我们使用spring jdbc时,首先我们定义一个dataSource bean并在创建jdbcTemplate对象时注入它。我想知道的是我们是否需要在原型范围内定义此dataSource。除非整个应用程序只有一个dataSource对象。我认为这会降低应用程序性能。

以下是我在spring配置文件中定义dataSouce的方法。

<bean id="dataSource"
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/testdb" />
<property name="username" value="root" />
<property name="password" value="123" />
</bean> 

在我的DAO课程中,我已经自动连接了dataSOurce,如下所示。

@Repository
public class RecordDAOImpl {

JdbcTemplate jdbcTemplate = null;

@Autowired
public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(dataSource);
}

}

让我知道为spring mvc web应用程序定义dataSource的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

  

我想知道的是我们是否需要在原型范围中定义此dataSource

不,我们不需要。我想这不是一个好主意,我们可以使用某种连接池数据源和单例范围bean。

我们也可以拥有多个数据库,并提供每个自己的数据源单例作用域,没有任何问题。

  

让我知道为spring mvc web应用程序定义dataSource的最佳方法是什么。

在xml文件中定义数据源没有任何问题(尽管许多开发人员似乎都避免使用xml)。我喜欢使用java配置,因为我觉得它更容易阅读。

根据驱动程序和数据库的不同,它看起来或多或少:

@Configuration
class DatasourceConfig {

    @Bean
    DataSource datasource() {
        PGPoolingDataSource dataSource = new PGPoolingDataSource();
        dataSource.setPassword("pass");
        dataSource.setPortNumber(123);
        dataSource.setUser("user");
        dataSource.setMaxConnections(10);
        return dataSource;
    }
}