我有一个实体类:
@Entity
@Table(name = "user")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
public class User {
@Id
private long id;
private String name;
@Transient
private String config;
@PostLoad
private void setConfig(){
//I would like to initialize config (transient) field after loading from database using configuration from application.yml
}
在setConfig()中,我想从application.yml中读取值。读这篇文章有什么可能? @Value不起作用。我也尝试使用静态类,但静态类不从配置文件读取值。
答案 0 :(得分:1)
@Value
仅在spring托管bean中使用时才有效。但是,实体不是由Spring管理的。
一种解决方案是在引导时读取某个托管Bean中的值,然后将其存储到某个静态变量中,然后就可以在setConfig()
方法中读取此变量的值。
@Configuration
public class ApplicationStartupConfig implements ApplicationListener<ApplicationReadyEvent> {
@Autowired
private Environment env;
private static String prop;
@Override
public void onApplicationEvent(final ApplicationReadyEvent event) {
prop = env.getProperty("property.path");
}
}