wang_yong 2020-01-22 14:44 采纳率: 0%
浏览 788

IDEA环境Springboot2.2.1进行Web开发,自定义pesonal.yml文件读取不到value值

先看下文件位置:
图片说明
文件内容如下:

jwt:
  # 加密私钥
  secret: bensu[sentiment]
  # header名称
  header: token
  # 有效时长7天(7*24*60*60)
  expire: 604800

项目依赖关系如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
        </dependency>
        <!-- SpringBoot Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <!--JSP依赖-->
        <!--dependency>-->
        <!--<groupId>org.apache.tomcat.embed</groupId>-->
        <!--<artifactId>tomcat-embed-jasper</artifactId>-->
        <!--</dependency>-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 数据库访问控制依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>4.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.webjars.bower/jquery -->
        <dependency>
            <groupId>org.webjars.bower</groupId>
            <artifactId>jquery</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.fusesource</groupId>
            <artifactId>sigar</artifactId>
            <version>1.6.4</version>
        </dependency>

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
    </dependencies>

绑定实体类代码如下:

@Component
@PropertySource("classpath:personal.yml")
@ConfigurationProperties(prefix = "jwt")
public class TokenDomain {
    // header名称
    @Value(value = "${header}")
    private String header;
    // 密钥
    @Value(value = "${secret}")
    private String secret;
    // 有效时长
    @Value(value = "${expire}")
    private long expire;

    public String getHeader() {
        return header;
    }

    public void setHeader(String header) {
        this.header = header;
    }

    public String getSecret() {
        return secret;
    }

    public void setSecret(String secret) {
        this.secret = secret;
    }

    public long getExpire() {
        return expire;
    }

    public void setExpire(long expire) {
        this.expire = expire;
    }
}

调用该实体类代码如下:

    @Autowired
    private TokenDomain tokenDomain;
    /**
     * 根据身份ID标识,生成Token
     * @param userId 根据身份ID标识
     * @param pwd 密码
     * @return Token 字串
     */
    public String createToken(String userId,String pwd){

        //过期时间,精确到毫秒
        Date expireDate = new Date(new Date().getTime() + tokenDomain.getExpire());

        // 生成token字串
        String token =Jwts.builder()
                .setHeaderParam("typ","JWT")
                .setHeaderParam("alg","HS256")
                .claim("userId",userId)
                .claim("pwd",pwd)
                .setSubject(userId+pwd)
                .setIssuedAt(new Date())
                .setExpiration(expireDate)
                .signWith(SignatureAlgorithm.ES512, tokenDomain.getSecret())
                .compact();
        return token;
    }

实体类在Spring测试类中可正常读取:

    @Autowired
    TokenDomain token;
    @Test
    void getPersonal(){
        System.out.println(token);
        System.out.println(token.getHeader());
        System.out.println(token.getSecret());
        System.out.println(token.getExpire());

    }

测试类返回结果如下:
图片说明
但是,业务逻辑类一直都无法正常读取内容,domain一直为null
图片说明
请高手指点迷津。

  • 写回答

1条回答

  • qbanxiaoli 2020-01-22 15:21
    关注

    去掉@PropertySource和@Value注解,这两个多余的,用@Value注解前缀也要加上

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)