Spring MVC 3.X解决一个web项目关联多个数据源(数据库)

[align=left][/align]今天项目里涉及到需要一个项目关联多个数据库。框架又是用的spring MVC 以前也没有整过。对spring 的注解也多少有点了解。
首先介绍下单个的数据库连接配置。
jdbc.properties文件中的属性
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://172.17.0.68:3306/xh_bidding?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=
spring配置文件app-config.xml
<context:component-scan base-package="com.xxx.news" />
<bean id="dataSource" name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
[color=red]<context:property-placeholder location="classpath:jdbc.properties" />[/color] </bean>

spring先说明声明一个com.xxx.news下的全局变量既bean---dataSource。这个大家都懂的。里面是用EL表达式取值。红色的说明文件路径。
java-DAO代码

public abstract class BaseDAO extends Base {
private JdbcTemplate jdbcTemplate;
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;



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


public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}

public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
return namedParameterJdbcTemplate;
}

}


默认情况下只需要这样写即可。spring的自动注入默认会根据类型来找到要注入的对象。既@Autowired
会找到dateSource这个bean。但是当发现有多个相同类型的bean时就不知道注入那一个了。默认好像会注入第一个。但是我不推荐默认写法,这样会让人混淆,不知道注入的对象和bean对象到底是通过什么方式关联的,很费解。
以上方式即可实现spring的单个数据源配置。
一下为多个数据源配置,其实没有想象中的那么复杂,当走通以后有点哭笑不得!但是摸出来还是值得的。
jdbc.properties文件中的属性
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://172.17.0.68:3306/xh_bidding?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=

#jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url2=jdbc:mysql://172.17.0.68:3306/xh_payment?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username2=root
#jdbc.password2=
spring配置文件app-config.xml

<context:component-scan base-package="com.xxx.news" />
<bean id="dataSource" name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="dataSource2" name="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url2}" />
<property name="username" value="${jdbc.username2}" />
<property name="password" value="${jdbc.password}" />
</bean>
<context:property-placeholder location="classpath:jdbc.properties" />

以上的意思没有什么变化
java代码 DAO
public abstract class BaseDAO extends Base {
private JdbcTemplate jdbcTemplate;
private JdbcTemplate jdbcTemplate2;
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
private NamedParameterJdbcTemplate namedParameterJdbcTemplate2;



@Autowired
@Resource(name="dataSource")
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(
dataSource);
}

@Autowired
@Resource(name="dataSource2")
public void setDataSource2(DataSource dataSource2){
this.jdbcTemplate2 = new JdbcTemplate(dataSource2);
this.namedParameterJdbcTemplate2 = new NamedParameterJdbcTemplate(dataSource2);
}



public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}

public JdbcTemplate getJdbcTemplate2() {
return jdbcTemplate2;
}

public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
return namedParameterJdbcTemplate;
}

public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate2() {
return namedParameterJdbcTemplate2;
}
}

当出现多个相同类型的bean时。需要指定所注入bean的name。这样就可以找到对应的bean对象。@Resource(name="dataSource")
以上jdbc连接方式也可以分开多个文件中写
这样即可实现。很简单,很方便!
感谢[color=red]段总[/color]同志给予的指导。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值