如何将配置属性加载到注释参数?

时间:2018-07-19 12:30:20

标签: java spring spring-boot annotations configuration-files

我有一个用@Entry注释的类。该注释接受两个参数baseobjectClasses。我想从静态配置文件application.yaml中加载这两个参数。

这是课程src/main/com.my.package/User/User.java

import org.springframework.ldap.odm.annotations.Attribute;
import org.springframework.ldap.odm.annotations.Entry;
import org.springframework.ldap.odm.annotations.Id;

import javax.naming.Name;


@Entry(base = "${ldap.organizationalUnitString}" , objectClasses = "${ldap.objectClass}")
public class User {

    @Id
    private Name id;

    private @Attribute(name = "cn") String username;
    private @Attribute(name = "sn") String password;

    //Getters and setters

}

这是我的配置文件src/resources/application.yaml

ldap:
  partitionSuffix: myPartitionSuffix
  partition: myPartition
  principal: "my Principal"
  password: myPassword
  url: ldap://myURL.url
  organizationalUnitString: "my OU"     
  objectClass: User

当前编写方式,我得到一个运行时异常

  

org.springframework.ldap.InvalidNameException:无效的名称:   $ {ldap.organizationalUnitString};

我已经使用@Value批注尝试了https://stackoverflow.com/a/38125875/4640960,但是我遇到了编译时错误

  

类型不匹配:无法从“值”转换为“字符串”

是否有某种方法可以实现我想要的目标?我知道使用public static final变量是可能的,如下所示:

import org.springframework.ldap.odm.annotations.Attribute;
import org.springframework.ldap.odm.annotations.Entry;
import org.springframework.ldap.odm.annotations.Id;

import javax.naming.Name;

import static com.my.package.User.User.base;
import static com.my.package.User.User.objectClass;


@Entry(base = base , objectClasses = objectClass)
public class User {

    public static final String base = "my OU";
    public static final String objectClass = "User";

    @Id
    private Name id;

    private @Attribute(name = "cn") String username;
    private @Attribute(name = "sn") String password;

    //Getters and setters
}

但是我不想在类中对参数进行硬编码。

还有其他几个问题,关于将非静态变量作为注释参数进行传递,我知道这是不可能的,但是我的问题略有不同。我只想传递静态配置属性。

0 个答案:

没有答案