解密jdbc.properties,再去连接数据库

properties 属性可以给系统配置一些运行参数,可以放在 XML 文件或者 propertie 文件中 ,而不是放在 Java 代码中, 这样好处在于方便参数修改,而不会引起代码的重新编译。一般而言 MyBatis 提供了3种方式使用 properties,它们是:

property子元素
properties文件
程序代码传递
下面展开讨论:

1. properties 属性
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration>
 
    <properties> 
        <property name="database.driver" value="com.mysql.jdbc.Driver"/>
        <property name="database.url" value="jdbc:mysql://localhost:3306/ssm"/>
        <property name="database.username" value="root"/>
        <property name="database.password" value="123456"/>
    </properties>
 
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${database.driver}"/>
                <property name="url" value="${database.url}"/>
                <property name="username" value="${database.username}"/>
                <property name="password" value="${database.password}"/>
            </dataSource>
        </environment>
    </environments>
 
    <!--每一个Mapper.xml都需要在mybatis核心配置文件中注册-->
    <mappers>
        <mapper resource="com/jack/mapper/UserMapper.xml"/>
    </mappers>
 
</configuration>
        这里使用了元素<properties>下的子元素<propertis>定义,用字符串 database.usemame 定义数据库用户名,然后就可以在数据库定义中引入这个已经定义好的属性参数 ,如 ${database.usemame} ,这样定义一次就可以到处引用了。但是如果属性参数有成百上千个,显然使用这样的方式不是一个很好的选择,这个时候可以使用 properties 文件。

2. 使用 properties 文件
        使用 properties 文件是比较普遍的方法,,一方面这个文件十分简单,其逻辑就是键值对应,可以配置多个键值放在 properties 文件中,也可以把多个键值放到 properties 文件中,这些都是允许的,它方便日后维护和修改。

        创建一个文件 jdbc.properties放到 classpath 的路径下

database.driver=com.mysql.jdbc.Driver 
database.url=jdbc:mysql://localhost:3306/ssm 
database.username=root 
database.password=123456
        在 MyBatis 中通过<properties>的属性 resource 来引入 properties 文件

<properties resource="jdbc.properties"/>
        也可以按 ${database.usemame} 的方法引入 properties 文件的属性参数到 MyBatis 配置文件中。这个时候通过维护 properties 文件就可以维护配置内容了。

3. 使用程序传递万式传递参数
        在真实的生产环境中,数据库的用户密码是对开发人员和其他人员保密的。运维人员为了保密,一般都需要把用户和密码经过加密成为密文后,配置到 properties 文件中 。对于开发人员及其他人员而言,就不知道其真实的用户密码了,数据库也不可能使用已经加密的字符串去连接,此时往往需要通过解密才能得到真实的用户和密码了。现在假设系统己经为提供了这样的 CodeUtils.decode(str) 进行解密,那么在创建 sqlSessionFactory 前,就需要把用户名和密码解密,然后把解密后的字符串重置到 properties 属性中。

String resource = "mybatis-config.xml";
InputStream inputStream;
InputStream in = Resources.getResourceAsStream("jdbc.properties");
Properties props = new Properties(); 
props.load(in); 
String username = props.getProperty("database.username"); 
String password = props.getProperty("database.password"); 
// 解密用户和密码,并在属性中重置
props.put("database.username", CodeUtils.decode(username)); 
props.put("database.password", CodeUtils.decode(password)); 
inputStream = Resources.getResourceAsStream(resource); 
// 使用程序传递的方式覆盖原有 properties 属性参数
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, props);
        首先使用 Resources 象读取了 jdbc. properties 配置文件,然后获取了它原来配置的用户和密码,进行解密并重置,最后使用 SqlSessionFactoryBuilder.build 方法,传递 properties 参数来完成。这将覆盖之前配置的密文,这样就能连接数据库了,同时也满足了运维人员对数据库用户和密码安全的要求。

4. 总结
        讨论了 MyBatis 使用 properties 的3种方式。这3种方式是有优先级的,最优先的是使用程序传递的方式,其次是使用 properties 文件的方式,最后是使用 property 子元素的方式, MyBatis 会根据优先级来覆盖原先配置的属性值。

        建议采用 properties 文件的方式,因为管理它简单易行,而且可以从 XML 文件中剥离出来独立维护,如果存在需要加密的场景,可以参考第3节的代码处理。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值