【在spring框架中使用${}动...">
美文网首页
变量命名冲突的解决思路(spring框架中使用${}动态引入用户

变量命名冲突的解决思路(spring框架中使用${}动态引入用户

作者: 一乐乐 | 来源:发表于2022-03-07 09:55 被阅读0次

<span style="color:red;font-size:18px;">【在spring框架中使用${}动态引入用户名】访问被拒绝:Access denied for user 'Hua'@'localhost' (using password: YES)</span>

图片.png 图片.png
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123)
    at ...
Caused by: java.sql.SQLException: Access denied for user 'Hua'@'localhost' (using password: YES)....

代码如下:

■ xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        ">
        
     <!-- 从classpath的根路径 加载db.properties -->   
     <context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/>

    <!-- 配置数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${driverClassName}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        <property name="initialSize" value="${initialSize}"/>
    </bean>
</beans>

■ 测试类:


@SpringJUnitConfig
public class App {

    @Autowired
    private DruidDataSource ds;
    

    @Test
    void test1() throws Exception {
//      ds = new DruidDataSource();
//      ds.setDriverClassName("com.mysql.jdbc.Driver");
//      ds.setUrl("jdbc:mysql://localhost:3306/springdemo?useSSL=false");
//      ds.setUsername("root");
//      ds.setPassword("admin");
        @Cleanup
        Connection connection = ds.getConnection();
        String sql = "select id, name, age from student";
        @Cleanup
        PreparedStatement ps = connection.prepareStatement(sql);
        @Cleanup
        ResultSet rs = ps.executeQuery();
        while(rs.next()) {
            System.out.print(rs.getLong("id") + ",");
            System.out.print(rs.getInt("age") + ",");
            System.out.println(rs.getString("name"));
        }

    }
}

● 分析思路:系统环境变量有个username,而数据库连接也有一个username,即出现同名了:

□ 解决同名思路1:通过设置属性,告诉配置不要引用系统环境变量的username,即system-properties-mode="NEVER"</span>

图片.png

✿ 那就不要出现同名的情况(从源头进行解决哈哈哈),连接数据库的变量名,命名为其他的

</span>

【一般情况,在sprig框架中,${username}动态引入的用户名默认是当前计算机系统的账户的用户名,不是数据库连接的用户名


写在后面的话

       如果你觉得一乐的文章给您带来了一些收获,可以给个三连❤️ ,一乐会一如既往地更新有价值的博客。如果文章存在错误,也欢迎大家指出。还有,如果大家有什么好的学习技巧、学习感悟,也非常欢迎大家在评论区一起交流~

最后感谢大家的支持,谢谢~

相关文章

网友评论

      本文标题:变量命名冲突的解决思路(spring框架中使用${}动态引入用户

      本文链接:https://www.haomeiwen.com/subject/stmqrrtx.html