当前位置: 首页 > 知识库问答 >
问题:

Springboot组件返回属性值为空

赖杰
2023-03-14
@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不是要自动填充这些值吗?

共有1个答案

弘焕
2023-03-14

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

编辑:

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


@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();
    }
}


 类似资料:
  • 在get方法中尝试在springboot中按id查找行时,收到一个空值。我在这里对数据库的调用是否有误? 存储库- 服务- 控制器-

  • 我想在下面返回JSON。 {“名字”:“杰基”} 新来的春靴在这里。1天大。有没有合适的方法可以做到这一点?

  • 问题内容: 通常,当使用嘲笑我会做类似 是否可以按照以下方式做点什么? 因此,而不是仅使用参数来确定结果时。它使用参数内的属性值来确定结果。 因此,在执行代码时,其行为如下 当前的解决方案,希望可以提出更好的建议。 问题答案: 这是一种方法。这使用一个对象来检查属性的值。 我实际上更喜欢另一种语法,它可以实现完全相同的效果。由您选择其中之一。这只是方法-测试类的其余部分应与上述相同。

  • 本文向大家介绍JS返回iframe中frameBorder属性值的方法,包括了JS返回iframe中frameBorder属性值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS返回iframe中frameBorder属性值的方法。分享给大家供大家参考。具体分析如下: frameborder 属性规定是否显示框架周围的边框。 希望本文所述对大家的javascript程序设计有所帮助

  • 我正在为我们的IT团队编写一个中央控制台,用于显示从Spring Boot Actuator endpoint/configprops检索到的属性,这些属性适用于我们SOA生态系统中运行的每个微服务。我有两个问题 似乎@Value注释的属性没有得到返回,尽管留档说 63.7发现外部属性的内置选项。。。。最终列表来自搜索源代码中的@ConfigurationProperties和@Value注释,以

  • 使用Angular ,我正在创建一个属性组件并向其中注入一个值。为此,我在这里跟随答案。 我想知道有没有一种方法,就像在AngularJS中一样,直接在组件中输入一个值,而不需要定义单独的< code>[form]=""。例如:<代码> 导致“。 我正在尝试将我的表单(通过变量)注入组件,但我不想进行其他绑定,例如根据这里的帖子,这应该是可能的,但我无法工作。自从更高的Angular版本以来,这种