关于Spring读取配置文件${user.name}是操作系统当前用户名的现象

问题引入:

在使用Spring引入@PropertySource(“classpath:user.properties”)读取配置文件,使用@Value("${user.name}")取配置文件中的值注入到bean类的成员变量中,测试打印toString发现name的值为操作系统当前用户的名字,而使用${user.home}注入的home属性则是当前用户的根目录。

代码:

userBean类:

@Component("userZero")
@PropertySource("classpath:user.properties")
public class User {
    @Value("${user.name}")
    private String name;
    @Value("${user.home}")
    private String home;
    @Value("1")
    private int id;

user.properties:

user.name=jack
user.home=jieshi

测试类:

	@Test
    public void testUser(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User userZero = (User) context.getBean("userZero");
        System.out.println(userZero);
        context.close();
    }

输出结果:

User{name = Sunset_glow, home = C:\Users\Sunset_glow, id = 1}

Process finished with exit code 0

原因:spring默认会优先加载系统环境变量,此时获取到的username的值实际上指的是当前计算机的用户名。而不是properties配置文件中指定的username的值。
结论:应避免使用user.name和user.home作为properties等文件的值,以免引起冲突

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮你创建一个数据库。 首先,你需要安装 MySQL 数据库并创建一个数据库,假设你的数据库名为 `test`,用户名为 `root`,密码为 `123456`。 然后,你可以在 MySQL 数据库中执行以下 SQL 语句来创建一个用户表: ```sql CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(50) NOT NULL COMMENT '密码', PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; ``` 接下来,你可以在 MyBatis 的配置文件中定义 ${mybatis.version}、${mybatis.spring.version}、${mysql.version} 等变量,例如: ```xml <properties> <property name="mybatis.version" value="3.5.6" /> <property name="mybatis.spring.version" value="2.0.6" /> <property name="mysql.version" value="8.0.23" /> <property name="jdbc.driverClassName" value="com.mysql.cj.jdbc.Driver" /> <property name="jdbc.url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai" /> <property name="jdbc.username" value="root" /> <property name="jdbc.password" value="123456" /> </properties> ``` 其中,${mybatis.version}、${mybatis.spring.version}、${mysql.version} 是 MyBatis 和 MySQL 的版本号,${jdbc.driverClassName}、${jdbc.url}、${jdbc.username}、${jdbc.password} 是数据库的连接信息。 在代码中,你可以使用 @Value 注解来获取这些变量的值,例如: ```java @Service public class UserServiceImpl implements UserService { @Value("${jdbc.username}") private String username; @Autowired private UserDao userDao; public User login(String username, String password) { User user = userDao.findByUsernameAndPassword(username, password); if (user == null) { throw new RuntimeException("登录失败"); } return user; } } ``` 在上面的代码中,@Value("${jdbc.username}") 注解会将配置文件中的 ${jdbc.username} 变量的值注入到 username 变量中。 另外,你还需要在 pom.xml 文件中添加以下插件,用来读取 properties 文件中的变量: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <configuration> <delimiters> <delimiter>${*}</delimiter> </delimiters> </configuration> </plugin> </plugins> </build> ``` 以上就是一个简单的创建数据库和定义变量的示例,希望能对你有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值