ContextLoaderListener是Spring框架提供的監聽器,用于初始化Spring應用上下文。在web.xml配置文件中配置ContextLoaderListener可以實現在應用啟動時加載Spring容器,并初始化配置文件中定義的bean,包括數據源等。
要實現多數據源的支持,可以在web.xml配置文件中配置多個ContextLoaderListener,每個ContextLoaderListener加載不同的配置文件來定義不同的數據源。例如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-datasource1.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-datasource2.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
在配置文件中定義數據源bean時,可以為不同的數據源定義不同的id,以便在具體的業務邏輯中引用對應的數據源。例如:
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${datasource1.driverClassName}" />
<property name="url" value="${datasource1.url}" />
<property name="username" value="${datasource1.username}" />
<property name="password" value="${datasource1.password}" />
</bean>
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${datasource2.driverClassName}" />
<property name="url" value="${datasource2.url}" />
<property name="username" value="${datasource2.username}" />
<property name="password" value="${datasource2.password}" />
</bean>
在具體的業務邏輯中,可以通過Spring注入的方式引用對應的數據源bean,從而實現多數據源的支持。例如:
@Autowired
@Qualifier("dataSource1")
private DataSource dataSource1;
@Autowired
@Qualifier("dataSource2")
private DataSource dataSource2;
通過以上配置和代碼實現,就可以在Spring應用中實現多數據源的支持。