springmvc 动态设置数据库,国际化内容的显示

来源:互联网 发布:b2b网络平台建设方案 编辑:程序博客网 时间:2024/06/05 12:02

国际化配置都是针对静态内容的变换,如果想要数据库的内容也要多语言显示,那可以设置多个数据库,每个数据库存一种语言的内容,显示时只要连接不同的数据库就可以进行多语言的切换显示。上一篇文章介绍了静态内容的国际化显示,本文在上一篇(http://blog.csdn.net/u011489887/article/details/77498775)的基础上进行扩展。

废话不多说直接上干货。

1 jdbc.properties文件内容

mysql.jdbc.driver_class=com.mysql.jdbc.Drivermysql.jdbc.connection.url=jdbc:mysql://localhost:3306/my_db?useUnicode=true&characterEncoding=utf8mysql.jdbc.connection.username=yangmysql.jdbc.connection.password=123456mysql.jdbc.driver_class-en=com.mysql.jdbc.Drivermysql.jdbc.connection.url-en=jdbc:mysql://localhost:3306/my_com?useUnicode=true&characterEncoding=utf8mysql.jdbc.connection.username-en=yangmysql.jdbc.connection.password-en=123456
2.applicationContext.xml文件配置

<bean id="config"          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="locations">            <list>                <value>classpath:jdbc.properties</value>            </list>        </property>    </bean>    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 数据库1 -->        <property name="driverClassName" value="${mysql.jdbc.driver_class}"/>        <property name="url" value="${mysql.jdbc.connection.url}"/>        <property name="username" value="${mysql.jdbc.connection.username}"/>        <property name="password" value="${mysql.jdbc.connection.password}"/>    </bean>        <bean id="dataSource-en" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- 数据库2 -->        <property name="driverClassName" value="${mysql.jdbc.driver_class-en}"/>        <property name="url" value="${mysql.jdbc.connection.url-en}"/>        <property name="username" value="${mysql.jdbc.connection.username-en}"/>        <property name="password" value="${mysql.jdbc.connection.password-en}"/>    </bean>    <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">        <constructor-arg>            <ref bean= "ds"/>        </constructor-arg>    </bean><bean id="ds" class="dynamicsource.DynamicDataSource"><property name="targetDataSources">    <!-- 动态配置数据库--><map key-type="java.lang.String"> <entry key="zh" value-ref="dataSource" /><entry key="en" value-ref="dataSource-en" /></map></property><property name="defaultTargetDataSource" ref="dataSource" /></bean>  
3.实现动态配置数据库的DynamicDataSource.java类

public class DynamicDataSource extends AbstractRoutingDataSource {        private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();        /**      *       * @return the currentLookupKey      */      public static String getCurrentLookupKey() {          return (String) contextHolder.get();      }        /**      *       *            the currentLookupKey to set      */      public static void setCurrentLookupKey(String currentLookupKey) {          contextHolder.set(currentLookupKey);      }        /*      * (non-Javadoc)      *       * @see      * org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#      * determineCurrentLookupKey()      */      @Override      protected Object determineCurrentLookupKey() {          return getCurrentLookupKey();      }    }  
4.设置一个拦截器在请求要显示的内容前设置数据库源,关键代码如下

 Locale locale = RequestContextUtils.getLocaleResolver(request) .resolveLocale(request); //得到当前显示资源文件的名字
 DynamicDataSource.setCurrentLookupKey(locale.getLanguage()); //设置数据库源