在使用Mybatis和Spring进行数据库操作时,我们通常将数据库连接的信息(url、用户名、密码等)配置到jdbc.properties里面。通过Spring加载这些信息,建立数据源。Mybatis的mapper使用数据源提供的数据库连接来访问数据库。
这种情况下,数据库的url、用户名、密码是提前配置好的,不能修改的,并且在服务器启动时就读取(通过Spring)了。
那么,有没有可能在运行期间,通过Java代码动态的修改用来进行数据库连接的用户名和密码信息。
比如,我在jdbc.properties里面配置的是:admin/123,但是运行期间外界给我传来一个新的数据库用户和密码:admin2/456,那么我能不能动态地将后续的数据库连接的用户名密码改成admin2/456?

不建议通过动态修改数据库的连接配置。
首先,动态修改数据库配置必将造成正在使用的系统无法正常运行,这会对公司的业务以及正在使用系统的用户造成很大的影响,会给公司造成损失。
其次,动态修改数据库配置如果操作失误,同样的对业务和用户都有影响。
建议:尽量不要提供对系统会造成严重影响的接口。如果真的需要动态修改数据库配置,尽量保证该数据库所能影响的接口范围最小。

以下是动态修改配置文件的例子:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class UpdateProperties {
    public static void main(String[] args) throws IOException {
        Properties prop = new Properties();
        //获取文件输入流
        FileInputStream inputFile = new FileInputStream("src/jdbc.properties");
        //读取配置文件
        prop.load(inputFile);
        inputFile.close();
        //打印修改前配置信息
        System.out.println("" + prop);
        //修改配置文件属性(动态修改,可对该方法进行传参)
        prop.setProperty("user", "admin2");
        prop.setProperty("password", "456");
        //获取文件输入流
        FileOutputStream outputFile = new FileOutputStream("src/jdbc.properties");
        //将修改后的信息保存到配置文件中
        prop.store(outputFile, "update jdbc");
        outputFile.close();
        // 打印修改后配置信息
        System.out.println("" + prop);
                                      2019-07-17 18:59:24

首先要确定你要使用什么连接池,Druid 的话是Springmvc有这样的配置的

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  init-method="init" destroy-method="close">
   <property name="driverClassName">
    <value>${jdbc.mysql.driver}</value>
   </property>
   <property name="url">
    <value>${jdbc.mysql.url}</value>
   </property>
   <property name="username">
    <value>${jdbc.mysql.username}</value>
   </property>
   <property name="password">
    <value>${jdbc.mysql.password}</value>
   </property>
   <!-- 连接池最大使用连接数 -->
   <property name="maxActive">
    <value>${maxActive}</value>
   </property>
   <!-- 初始化连接大小 -->
   <property name="initialSize">
    <value>${initialSize}</value>

com.alibaba.druid.pool.DruidDataSource 这个类extendDruidAbstractDateSource 这个类里面有修改账号密码的方法

 public String getPassword() {
        return this.password;
    public void setPassword(String password) {
        if(!StringUtils.equals(this.password, password)) {
            if(this.inited) {
                LOG.info("password changed");
            this.password = password;

所以说是可以拿到dataSource 修改里面的用户名和密码的

2019-07-17 18:59:24 企业邮箱发送邮件时,若出现投递失败产生退信,内容提示包含如下: the mta server of * reply:550 failed to meet SPF requirements 或者 the mta server of 163.com — 163mx01.mxmail.netease.com(220.181.14.141) reply:550 MI:SPF mx14,QMCowECpA0qTiftVaeB3Cg—.872S2 1442548128 http://mail.163.com/help 298658 Java项目中如何使用反射? 阿里云产品体系分为6大分类——云计算基础——数据库——关系型数据库——分布式关系型数据库服务 DRDS 阿里云产品体系分为6大分类——云计算基础——数据库——NoSQL数据库 阿里云产品体系分为6大分类——云计算基础——数据库——数据仓库 Java运算符、标识符以及进制