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连接方式也可以分开多个文件中写
这样即可实现。很简单,很方便!
感谢 段总同志给予的指导。

猜你喜欢

转载自ww1224.iteye.com/blog/1178984