mysql - 在 spring 4 mvc 中根据客户端登录更改相同的服务器数据库

标签 mysql spring jdbctemplate

我在linux服务器上有mysql服务器。它包含针对 5 个不同客户端的 5 个数据库。到目前为止,我已经创建了 5 个 tomcat 实例来部署 5 个基于客户端的 war 并从servelet.xml 文件访问数据库,如下所示,

client1实例 war :

<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/client1" />
    <property name="username" value="rootuser" />
    <property name="password" value="pswd" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
    <property name="dataSource" ref="dataSource"/> 
</bean>
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" >
    <constructor-arg ref="dataSource"/>
</bean>

client2实例 war :

<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/client2" />
    <property name="username" value="rootuser" />
    <property name="password" value="pswd" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
    <property name="dataSource" ref="dataSource"/> 
</bean>
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" >
    <constructor-arg ref="dataSource"/>
</bean>

配置类:

public class JdbcRepository {

    @Autowired
    @Qualifier("jdbcTemplate")
    protected JdbcTemplate jdbcTemplate;

    @Autowired
    @Qualifier("namedParameterJdbcTemplate")
    protected NamedParameterJdbcTemplate  namedParameterJdbcTemplate ;

    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource; //mysqlSource;

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
        return namedParameterJdbcTemplate;
    }

    public void setNamedParameterJdbcTemplate(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
        this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
    }

    public DataSource getDataSource() {
        return dataSource;
    }

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

    public Long findMemberIdByUserName(String username) {
        try{
        String sql = "SELECT userLoginId FROM user WHERE userName = ?";
        Long id = jdbcTemplate.queryForObject(sql, new Object[]{username}, Long.class);
        return id;
        }
        catch(Exception e){
            return 0l;
        }
    }

但现在我想创建单个实例并为所有客户端部署单个war,并根据用户登录访问数据库。就像下面这样,

<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/{DBBasedOnLoginUser}" />
    <property name="username" value="rootuser" />
    <property name="password" value="pswd" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
    <property name="dataSource" ref="dataSource"/> 
</bean>
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" >
    <constructor-arg ref="dataSource"/>
</bean>

如何实现这一目标?

最佳答案

因此,您希望根据某些条件与不同的数据库进行通信。

Changing datasource connection url runtime

这正是您所需要的。

关于mysql - 在 spring 4 mvc 中根据客户端登录更改相同的服务器数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41298508/

相关文章:

jdbc - 如何设置到 neo4j 的 jdbc 连接?

java - 如何将 PostgreSQL hstore/json 与 JdbcTemplate 一起使用

mysql - 将 XML 导入 Mysql 参数存储过程

mysql - 仅包含查询结果中的第一组和最后一组

java - 我想将一些数据上传到我的数据库,但该方法返回 null

java - 在spring中获取工厂类的servletcontext

javascript - Ajax PHP 响应登录

java - Spring Reactor 线程模型

java - 一定尺寸范围内的范围?

java - 我收到 Null Pointer Exception 如何解决它。我正在使用 Spring 3.0 和 jdbcTemplate