Springboot组件返回的属性值为null



我实现了这个springboot组件,它应该在运行时返回一些属性的值

@Component
public class ConnectionService {
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("{spring.liquibase.change-log}")
private String changelog;
public ConnectionService() {
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getChangelog() {
return changelog;
}
public void setChangelog(String changelog) {
this.changelog = changelog;
}
}

但由于某些原因,所有属性都被返回为空

这就是我如何称我的组件

@SpringBootApplication
public class MigrationsApplication {
private static final Logger logger = LoggerFactory.getLogger(MigrationsApplication.class);
@Autowired
static
ConnectionService cs;
public static void main(String[] args) throws DatabaseException {
try{
cs=new ConnectionService();
String dbUrl=cs.getUrl();
logger.info("URL:"+dbUrl);
String dbUsername=cs.getUsername();
logger.info("USERNAME:"+dbUsername);
String dbPassword=cs.getPassword();
logger.info("PASSWORD:"+dbPassword);
String changelogPath=cs.getChangelog();
}

我做错了什么?我需要组件的完整构造函数吗?是因为cs是静态的吗?springboot不是要自动填充值吗?

Component意味着这是一个bean,因此Spring将处理它的生命周期。当创建bean时,它将用请求的数据填充它。但是,您尝试用它填充静态值,这不是生命周期的一部分。向类中添加一个完整的arg构造函数,并让Spring将其注入到您想要使用它的地方,它就会正常工作。

编辑:

我刚刚意识到你没有使用静态变量,所以当你正确地让Spring初始化你的bean 时,字段注入应该可以工作

第2版:

根据你的片段,你用错了。不要将业务逻辑放入main void中,请使用SpringApplication.run,此外,如果您想要CLI,请使用Spring的CommandLineRunner接口,如下所示:


@SpringBootApplication
public class MigrationsApplication.class implements CommandLineRunner {
private static final Logger logger = LoggerFactory.getLogger(MigrationsApplication.class);

@Autowired
ConnectionService cs;
public static void main(String[] args) {
SpringApplication.run(MigrationsApplication.class, args);
}

@Override
public void run(String... args) {
String dbUrl=cs.getUrl();
logger.info("URL:"+dbUrl);
String dbUsername=cs.getUsername();
logger.info("USERNAME:"+dbUsername);
String dbPassword=cs.getPassword();
logger.info("PASSWORD:"+dbPassword);
String changelogPath=cs.getChangelog();
}
}

相关内容

  • 没有找到相关文章

最新更新