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

如何定义和读取spring应用程序中的对象数组。属性?

燕钟展
2023-03-14

在我的Java类中,我想读取一个变量,该变量将一次性为我提供一个令牌列表,我的令牌是一个对象,字段为name、value和enabled。

@Value("authorised_applications")
private List<Token> tokenList;

如何在我的应用程序中定义这一点。属性文件,以便我可以一次读取所有标记。例如,我有如下标记:

token1
- value: 123456,
- name: specialToken,
- enabled: true

token2
- value: 56173,
- name: newToken,
- enabled: false

我尝试了其他链接,但找不到一种方法可以一次全部阅读。

想要创建这样的bean

@ConfigurationProperties("authorised")
@Configuration
public class AppTokenConfiguration {
    private final List<TokenStore.Token> tokenList = new ArrayList<>();

    @Bean
    public TokenStore getTokenStore() {
        return new TokenStore(tokenList.stream().collect(Collectors.toMap(TokenStore.Token::getToken, Function.identity())));
    }
}

共有1个答案

祖波光
2023-03-14

在具有要从应用程序配置的属性的类上使用带有前缀的ConfigurationProperties(配置属性)。属性。

应用属性:

my.tokenList[0].name=test1
my.tokenList[0].value=test2
my.tokenList[0].enabled=true

my.tokenList[1].name=test3
my.tokenList[1].value=test4
my.tokenList[1].enabled=false

server.port=8080

大学生Java语言

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties("my")
@Component
public class Student {

    private final List<Token> tokenList = new ArrayList<>();

    public List<Token> getTokenList() {
        return tokenList;
    }

    @Override
    public String toString() {
        return "TestNow [tokenList=" + tokenList + "]";
    }
}

代币Java语言

public class Token {

    private String value;
    private String name;
    private boolean enabled;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    @Override
    public String toString() {
        return "Token [value=" + value + ", name=" + name + ", enabled=" + enabled + "]";
    }

}

验证学生。Java语言

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class ValidateStudent {

    @Autowired
    private Student student;

    @PostConstruct
    private void init() {
        System.out.println("printing Student Object---> " + student);
    }

}

证明(输出):

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v2.6.0-SNAPSHOT)

2021-10-20 21:17:30.083  INFO 14632 --- [           main] c.e.S.SpringBootCollectionsApplication   : Starting SpringBootCollectionsApplication using Java 14.0.2 on Machine with PID 14632 (D:\workspaces\Oct20_app_properties\SpringBootCollections\target\classes started by D1 in D:\workspaces\Oct20_app_properties\SpringBootCollections)
2021-10-20 21:17:30.088  INFO 14632 --- [           main] c.e.S.SpringBootCollectionsApplication   : No active profile set, falling back to default profiles: default
2021-10-20 21:17:31.869  INFO 14632 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-10-20 21:17:31.891  INFO 14632 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-10-20 21:17:31.891  INFO 14632 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.53]
2021-10-20 21:17:32.046  INFO 14632 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-10-20 21:17:32.046  INFO 14632 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1869 ms
printing Student Object---> TestNow [tokenList=[Token [value=test2, name=test1, enabled=true], Token [value=test4, name=test3, enabled=false]]]
2021-10-20 21:17:32.654  INFO 14632 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-10-20 21:17:32.675  INFO 14632 --- [           main] c.e.S.SpringBootCollectionsApplication   : Started SpringBootCollectionsApplication in 3.345 seconds (JVM running for 3.995)

编辑答案:

BeanConfig类:

@Configuration
public class AppConfig {
   
    @Autowired
    private AppTokenConfiguration appTokenConfiguration;

    @Bean
    public TokenStore getTokenStore() {
        return new TokenStore(appTokenConfiguration.getTokenList().stream().collect(Collectors.toMap(TokenStore.Token::getToken, Function.identity())));
    }
}

属性配置类:

@ConfigurationProperties("authorised")
@Component
public class AppTokenConfiguration {

    private final List<TokenStore.Token> tokenList = new ArrayList<>();
    
    public void getTokenList(){
     return tokenList;
    }
}
 类似资料:
  • 在启动我的spring boot应用程序时,我希望使用命令行参数设置自定义配置文件路径,例如: 那么如何读取这个文件来生成spring配置呢?我可以以某种“动态”方式使用注释吗?

  • 在我的Android Studio项目中,我在gradle中定义了代理设置。与Git repo同步的属性文件。只要在那里定义了代理密码,我就需要将其移动到本地。属性文件。我想实现这样的smth: 在gradle.properties: 在当地。特性: 我该怎么做?

  • 我在TypeScript中创建了一个对象数组: 有人能告诉我怎样才能正确地声明它的类型吗?可以内联还是需要两个定义? 我希望用类型声明替换,以便稍后的TypeScript会在我错误地使用提醒我。

  • 我正在读取google appengine应用程序中文件夹(/war/config/client.properties)中的属性文件。它在我的本地服务器上运行良好,但在生产模式下不工作,并且抛出异常java。安全AccessControlException:拒绝访问(java.io.FilePermission)。 你能告诉我如何在生产模式下工作吗。

  • 问题内容: 我对spring / java相当陌生,并且一直在为我正在工作的项目检查spring- boot。我一直在遵循指南,最后有一个(半)运行中的Web应用程序MVC + JPA用于数据访问。当我通过Jar方法部署应用程序时,一切正常: 但是,我们的应用程序最终将部署到Tomcat(v7.0.40),因此我需要从项目中创建一个war文件。我已经在spring.io网站上遵循了将jars转换为

  • src/main/resources/application.properti 为了完整起见,这里是build.gradle: 我构建应用程序: