在我的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())));
}
}
在具有要从应用程序配置的属性的类上使用带有前缀的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: 我构建应用程序: