对于想了解SpringBoot@ConfigurationPropertiesYAML引用的读者,本文将提供新的信息,我们将详细介绍springboot引用配置文件,并且为您提供关于Kotlin和Sp
对于想了解Spring Boot @ConfigurationProperties YAML引用的读者,本文将提供新的信息,我们将详细介绍springboot引用配置文件,并且为您提供关于Kotlin和Spring Boot @ConfigurationProperties、org.springframework.boot.configurationsample.ConfigurationProperties的实例源码、org.springframework.boot.context.properties.ConfigurationPropertiesBinding的实例源码、org.springframework.boot.context.properties.ConfigurationProperties的实例源码的有价值信息。
本文目录一览:- Spring Boot @ConfigurationProperties YAML引用(springboot引用配置文件)
- Kotlin和Spring Boot @ConfigurationProperties
- org.springframework.boot.configurationsample.ConfigurationProperties的实例源码
- org.springframework.boot.context.properties.ConfigurationPropertiesBinding的实例源码
- org.springframework.boot.context.properties.ConfigurationProperties的实例源码
Spring Boot @ConfigurationProperties YAML引用(springboot引用配置文件)
我真的很喜欢Spring的@ ConfigurationProperties-功能,可以通过YAML将配置属性加载到Java类中。
通常,我会以某种方式使用它,即拥有以下yaml文件:
lst: typ: A: "FLT" B: "123" C: "345" D: "TTS"
类型属性将被映射到Java Map。现在我想有一个在yaml文件本身中引用yaml片段的解决方案,以便可以重用对该片段的引用:
lst: ${typs}typs: A: "FLT" B: "123" C: "345" D: "TTS"
Spring和@ConfigurationProperties有可能吗?
答案1
小编典典我相信 只能将占位符与字符串属性一起使用 。这给您两个选择:
- 重复这些值;
- 或 将地图定义为属性字符串 。
解决方案-将地图定义为键值的逗号分隔字符串
如果您单击上面的链接,将提供完整的说明。我会引导您完成。
(1)application.yml:
prop1: A:FLT, B:123, C...prop2: ${prop1}
(2)定义一个String toMap转换器/拆分器
@Component("PropertySplitter")public class PropertySplitter { public Map<String, String> map(String property) { return this.map(property, ","); } private Map<String, String> map(String property, String splitter) { return Splitter.on(splitter).omitEmptyStrings().trimResults().withKeyValueSeparator(":").split(property); }}
(3)使用@Value和分割器注入地图:
@Value("#{PropertySplitter.map(''${prop1}'')}")Map<String, String> prop1;@Value("#{PropertySplitter.map(''${prop2}'')}")Map<String, String> prop2;
Kotlin和Spring Boot @ConfigurationProperties
如何解决Kotlin和Spring Boot @ConfigurationProperties?
使用新的 您可以这样:
@ConstructorBinding
@ConfigurationProperties(prefix = "swagger")
data class SwaggerProp(
val title: String, val description: String, val version: String
)
并且不要忘记在依赖项中包含此内容build.gradle.kts
:
dependencies {
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
}
解决方法
如何使用 Kotlin* 在 Spring Boot中 正确初始化ConfigurationProperties ? *
目前, 我喜欢以下示例:
@ConfigurationProperties("app")
class Config {
var foo: String? = null
}
但是它看起来很丑陋,实际上foo
不是一个var
可行的方法,foo是 常量 val
ue, 应该在启动时进行初始化,并且将来不会更改
。
org.springframework.boot.configurationsample.ConfigurationProperties的实例源码
@ConfigurationProperties("foo") public Foo foo() { return new Foo(); }
@ConfigurationProperties("foo") public Foo getFoo() { return new Foo(); }
@ConfigurationProperties("one") public SimplePojo one() { return new SimplePojo(); }
@ConfigurationProperties("two") public SimplePojo two() { return new SimplePojo(); }
@ConfigurationProperties("something") public Foo foo() { return new Foo(); }
@ConfigurationProperties(prefix = "foo") public Foo foo() { return new Foo(); }
@ConfigurationProperties(prefix = "invalid") InvalidMethodConfig foo() { return new InvalidMethodConfig(); }
@ConfigurationProperties(prefix = "conflict") public Foo foo() { return new Foo(); }
@ConfigurationProperties("foo") public Foo getFoo() { return new Foo(); }
@ConfigurationProperties("something") public Foo foo() { return new Foo(); }
@ConfigurationProperties(prefix = "foo") public Foo foo() { return new Foo(); }
@ConfigurationProperties(prefix = "invalid") InvalidMethodConfig foo() { return new InvalidMethodConfig(); }
@ConfigurationProperties(prefix = "conflict") public Foo foo() { return new Foo(); }
@ConfigurationProperties("foo") public Foo getFoo() { return new Foo(); }
@ConfigurationProperties("something") public Foo foo() { return new Foo(); }
@ConfigurationProperties(prefix = "foo") public Foo foo() { return new Foo(); }
@ConfigurationProperties(prefix = "invalid") InvalidMethodConfig foo() { return new InvalidMethodConfig(); }
@ConfigurationProperties(prefix = "conflict") public Foo foo() { return new Foo(); }
org.springframework.boot.context.properties.ConfigurationPropertiesBinding的实例源码
@ConfigurationPropertiesBinding @Bean public Converter<String,List<Class<? extends Throwable>>> commaSeparatedStringToThrowablesCollection() { return new Converter<String,List<Class<? extends Throwable>>>() { @Override public List<Class<? extends Throwable>> convert(final String source) { try { final List<Class<? extends Throwable>> classes = new ArrayList<>(); for (final String className : StringUtils.commaDelimitedListToStringArray(source)) { classes.add((Class<? extends Throwable>) ClassUtils.forName(className.trim(),getClass().getClassLoader())); } return classes; } catch (final Exception e) { throw new IllegalStateException(e); } } }; }
@Bean @ConfigurationPropertiesBinding public Converter<String,Foo> converter() { return new Converter<String,ConverterBindingTests.Foo>() { @Override public Foo convert(String source) { return new Foo(source); } }; }
@Bean @ConfigurationPropertiesBinding public Converter<String,ConverterBindingTests.Foo>() { @Override public Foo convert(String source) { return new Foo(source); } }; }
@Bean @ConfigurationPropertiesBinding public Converter<String,ConverterBindingTests.Foo>() { @Override public Foo convert(String source) { Foo foo = new Foo(); foo.setName(source); return foo; } }; }
@Bean @ConfigurationPropertiesBinding public StringOrNumberToMigrationVersionConverter stringOrNumberMigrationVersionConverter() { return new StringOrNumberToMigrationVersionConverter(); }
@Bean @ConfigurationPropertiesBinding public ConstraintConverter constraintConverter() { return new ConstraintConverter(); }
@Bean @ConfigurationPropertiesBinding public Converter<String,InetSocketAddress> inetSocketAddressConverter() { return new InetSocketAddressConverter(); }
@Bean @ConfigurationPropertiesBinding public DurationConverter durationConverter() { return new DurationConverter(); }
@Bean @ConfigurationPropertiesBinding public StringOrNumberToMigrationVersionConverter stringOrNumberMigrationVersionConverter() { return new StringOrNumberToMigrationVersionConverter(); }
@Bean @ConfigurationPropertiesBinding public ShorthandMapConverter shorthandMapConverter() { return new ShorthandMapConverter(); }
@Bean @ConfigurationPropertiesBinding public Converter<String,InetSocketAddress> inetSocketAddressConverter() { return new InetSocketAddressConverter(); }
@Bean @ConfigurationPropertiesBinding public SignatureAlgorithmConverter signatureAlgorithmConverter() { return new SignatureAlgorithmConverter(); }
@Bean @ConfigurationPropertiesBinding @IntegrationConverter public Converter<String,Expression> spelConverter() { return new SpelConverter(); }
@Bean @ConfigurationPropertiesBinding public StringToDurationConverter stringToDurationConverter() { return new StringToDurationConverter(); }
@Bean @ConfigurationPropertiesBinding public StringToHostAndPortConverter stringToHostAndPortConverter() { return new StringToHostAndPortConverter(); }
@Bean @ConfigurationPropertiesBinding public StringToTimeValueConverter stringToDurationConverter() { return new StringToTimeValueConverter(); }
org.springframework.boot.context.properties.ConfigurationProperties的实例源码
@Bean @ConfigurationProperties(prefix = "security.oauth2.client") public BaseClientDetails oauth2clientDetails() { BaseClientDetails details = new BaseClientDetails(); if (this.client.getClientId() == null) { this.client.setClientId(UUID.randomUUID().toString()); } details.setClientId(this.client.getClientId()); details.setClientSecret(this.client.getClientSecret()); details.setAuthorizedGrantTypes(Arrays.asList("authorization_code","password","client_credentials","implicit","refresh_token")); details.setAuthorities( AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_USER")); details.setRegisteredRedirectUri(Collections.<String>emptySet()); return details; }
@Bean @ConfigurationProperties(DruidServletProperties.DRUID_SERVLET_PREFIX) public ServletRegistrationBean druidServlet(DruidServletProperties properties) { ServletRegistrationBean reg = new ServletRegistrationBean(); reg.setServlet(new StatViewServlet()); reg.addUrlMappings(properties.getUrlMappings()); if(properties.getAllow() !=null){ reg.addInitParameter("allow",properties.getAllow()); // IP白名单 (没有配置或者为空,则允许所有访问) } if(properties.getDeny() !=null){ reg.addInitParameter("deny",properties.getDeny()); //IP黑名单 (存在共同时,deny优先于allow) } if(properties.getLoginUsername() !=null){ reg.addInitParameter("loginUsername",properties.getLoginUsername()); //用户名 } if(properties.getLoginPassword() !=null){ reg.addInitParameter("loginPassword",properties.getLoginPassword()); // 密码 } if(properties.getResetEnable() !=null){ reg.addInitParameter("resetEnable",properties.getResetEnable().toString());// 禁用HTML页面上的“Reset All”功能 } return reg; }
@Bean("blueKitEditProfilePolicy") @ConditionalOnBean(EditProfilePolicy.class) @ConditionalOnProperty(prefix = "blue-kit.b2c.policy.edit-profile",value = {"name","redirect-url"}) @ConfigurationProperties("blue-kit.b2c.policy.edit-profile") public EditProfilePolicy blueKitEditProfilePolicy(){ return new EditProfilePolicy(); }
@Bean @ConditionalOnMissingBean(AliveHealthEndpoint.class) @ConfigurationProperties("extended.health.alive") public AliveHealthEndpoint applicationAliveEndpoint() { return new AliveHealthEndpoint("alive",new OrderedHealthAggregator()); }
/** * Get data source. * * @return Data source */ @Primary @Bean @ConfigurationProperties(prefix="spring.datasource") public DataSource getDatasource() { return DataSourceBuilder.create().build(); }
@Bean(name="writeDataSource",destroyMethod = "close",initMethod="init") @Primary @ConfigurationProperties(prefix = "spring.datasource") public DataSource writeDataSource() { logger.info("初始化写入数据源……"); return DataSourceBuilder.create().type(dataSourceType).build(); }
@Bean @ConfigurationProperties(prefix = "spring.redis") public JedisConnectionFactory getConnectionFactory() { JedisConnectionFactory factory = new JedisConnectionFactory(); JedisPoolConfig config = getRedisConfig(); factory.setPoolConfig(config); logger.info("JedisConnectionFactory bean init success."); return factory; }
@Bean @ConfigurationProperties("spring.mvc.viewManager") public ContentNegotiationManager contentNegotiationManager() { // 声明contentNegotiationManagerFactory工厂实例,并根据配置参数填充对象。 ContentNegotiationManagerfactorybean contentNegotiationManagerFactory = new ContentNegotiationManagerfactorybean(); // 手动填充mediaTypes参数 Map<String,MediaType> mediaTypes = new HashMap<String,MediaType>(); mediaTypes.put("json",MediaType.APPLICATION_JSON_UTF8); mediaTypes.put("xml",MediaType.APPLICATION_XML); contentNegotiationManagerFactory.addMediaTypes(mediaTypes); // 返回contentNegotiationManager对象 return contentNegotiationManagerFactory.getobject(); }
@Bean("blueKitSignInPolicy") @ConditionalOnBean(SignInPolicy.class) @ConditionalOnProperty(prefix = "blue-kit.b2c.policy.sign-in","redirect-url"}) @ConfigurationProperties("blue-kit.b2c.policy.sign-in") public SignInPolicy blueKitSignInPolicy(){ return new SignInPolicy(); }
@Bean @ConditionalOnMissingBean(DetailHealthEndpoint.class) @ConfigurationProperties("extended.health.detail") public DetailHealthEndpoint detailHealthEndpoint() { return new DetailHealthEndpoint("detail",new OrderedHealthAggregator()); }
@Bean @Primary @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { ConnectionData conData = getDbUrl(); return DataSourceBuilder .create() .url(conData.getUrl() + "?sslmode=require") .username(conData.getUser()) .password(conData.getpassword()) .driverClassName("org.postgresql.Driver") .build(); }
private Map<String,Object> getConfigurationPropertiesBeans( ApplicationContext context,ConfigurationbeanfactoryMetaData beanfactoryMetaData) { Map<String,Object> beans = new LinkedHashMap<String,Object>(); beans.putAll(context.getBeansWithAnnotation(ConfigurationProperties.class)); if (beanfactoryMetaData != null) { beans.putAll(beanfactoryMetaData .getBeansWithFactoryAnnotation(ConfigurationProperties.class)); } return beans; }
@Primary @Bean(name= "dataSource",destroyMethod= "close",initMethod="init") @ConfigurationProperties(prefix="spring.dataSource") public DataSource dataSource() { logger.debug("Configruing DataSource"); return new DruidDataSource(); }
/** * 主库配置(负责写) * @return */ @Bean(name="masterDataSource") @Primary @ConfigurationProperties(prefix = "spring.datasource") public DataSource writeDataSource() { log.info("-------------------- Master DataSource init ---------------------"); return DataSourceBuilder.create().type(dataSourceType).build(); }
@Bean @ConfigurationProperties(DruidStatProperties.DRUID_STAT_PREFIX) public BeanTypeAutoproxyCreator typeProxyCreator(DruidStatProperties properties){ if (properties.getTargetBeanType() == null){ throw new IllegalStateException(DruidStatProperties.DRUID_STAT_PREFIX+".target-bean-type must not null."); } BeanTypeAutoproxyCreator creator = new BeanTypeAutoproxyCreator(); creator.setTargetBeanType(properties.getTargetBeanType()); creator.setProxyTargetClass(proxyTargetClass); creator.setInterceptorNames(DruidStatProperties.DRUID_STAT_INTERCEPTOR_NAME); return creator; }
@Bean @ConfigurationProperties(prefix="spring.redis") public JedisConnectionFactory getConnectionFactory(){ JedisConnectionFactory factory = new JedisConnectionFactory(); JedisPoolConfig config = getRedisConfig(); factory.setPoolConfig(config); System.out.println("JedisConnectionFactory bean init success."); return factory; }
@Bean @Primary @Qualifier("jpaDataSource") @ConfigurationProperties(prefix = "spring.datasource") public DataSource createJpaDataSource() { return DataSourceBuilder.create().type(dataSourceType).build(); }
@Bean @ConfigurationProperties("calcite.datasource") public DataSource calciteDataSource(@Autowired String inlineModel) { DataSource dataSource = DataSourceBuilder .create() .driverClassName("org.apache.calcite.jdbc.Driver") .url("jdbc:calcite:lex=JAVA;model=inline:" + inlineModel) .build(); log.info("Generated Calcite mode: " + inlineModel); return dataSource; }
/** * */ @Bean @RefreshScope @ConfigurationProperties("zuul") public ZuulProperties zuulProperties() { return new ZuulProperties(); }
@ConfigurationProperties(prefix = "spring.datasource.master") @Bean(name = "masterDataSource") @Primary public DataSource masterDataSource() { DruidDataSource dataSource = new DruidDataSource(); try { dataSource.setFilters("stat,wall,log4j"); } catch (sqlException e) { // } return dataSource; }
@Bean("blueKitChangeEmailPolicy") @ConditionalOnBean(ChangeEmailPolicy.class) @ConditionalOnProperty(prefix = "blue-kit.b2c.policy.change-email","redirect-url","template-url"}) @ConfigurationProperties("blue-kit.b2c.policy.change-email") public ChangeEmailPolicy blueKitChangeEmailPolicy(){ throw new NotFoundException("'change-email' is not a valid policy (yet) provided by Microsoft's Azure AD B2C. You must manually change the email using the GraphApi instead."); }
@Bean @ConditionalOnProperty(prefix = DRUID_WALL_FILTER_PREFIX,name = "enabled",havingValue = "true") @ConfigurationProperties(DRUID_WALL_FILTER_PREFIX) public WallFilter wallFilter(WallConfig wallConfig) { log.debug("druid wall-filter init..."); WallFilter filter = new WallFilter(); filter.setConfig(wallConfig); return filter; }
@Bean @ConditionalOnProperty(prefix = DRUID_SLF4J_FILTER_PREFIX,havingValue = "true") @ConfigurationProperties(DRUID_SLF4J_FILTER_PREFIX) public Slf4jLogFilter slf4jLogFilter() { log.debug("druid slf4j-filter init..."); return new Slf4jLogFilter(); }
@Bean("blueKitSignUpPolicy") @ConditionalOnBean(SignUpPolicy.class) @ConditionalOnProperty(prefix = "blue-kit.b2c.policy.sign-up","redirect-url"}) @ConfigurationProperties("blue-kit.b2c.policy.sign-up") public SignUpPolicy blueKitSignUpPolicy(){ return new SignUpPolicy(); }
@Bean @ConfigurationProperties(DruidFilterProperties.DRUID_FILTER_PREFIX) public FilterRegistrationBean druidFilter(DruidFilterProperties properties) { FilterRegistrationBean registration = new FilterRegistrationBean(); WebStatFilter filter = new WebStatFilter(); registration.setFilter(filter); registration.addUrlPatterns(properties.getUrlPattern()); registration.addInitParameter("exclusions",properties.getExclusions()); registration.addInitParameter("sessionStatMaxCount",properties.getSessionStatMaxCount().toString()); registration.addInitParameter("sessionStatEnable",properties.getSessionStatEnable().toString()); registration.addInitParameter("principalSessionName",properties.getPrincipalSessionName()); registration.addInitParameter("principalCookieName",properties.getPrincipalCookieName()); registration.addInitParameter("profileEnable",properties.getProfileEnable().toString()); return registration; }
/** * DataSource * @return DataSource */ @Bean @Primary @ConfigurationProperties(prefix="datasource.idp") public DataSource dataSource() { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); return builder.setType(EmbeddedDatabaseType.H2).build(); }
/** * Conditionally constructs a new configuration for {@link StatsdMetricsPlugin} if application doesn't provide its own {@link Bean} of * {@link StatsdMetricsConfig} type. * * @return New configuration. */ @Bean @ConditionalOnMissingBean(StatsdMetricsConfig.class) @ConfigurationProperties(prefix = "hekate.metrics.statsd") public StatsdMetricsConfig statsdMetricsConfig() { return new StatsdMetricsConfig(); }
/** * Constructs a new instance of {@link JdkCodecFactory}. * * @return Codec factory. */ @Bean @Qualifier("default") @ConfigurationProperties(prefix = "hekate.codec.jdk") public JdkCodecFactory<Object> jdkCodecFactory() { return new JdkCodecFactory<>(); }
/** * Constructs a new instance of {@link KryoCodecFactory}. * * @return Codec factory. */ @Bean @Qualifier("default") @ConfigurationProperties(prefix = "hekate.codec.kryo") public KryoCodecFactory<Object> kryoCodecFactory() { return new KryoCodecFactory<>(); }
@Bean @Primary @ConfigurationProperties(prefix = "spring.datasource.dbcp2") public org.apache.commons.dbcp2.BasicDataSource dataSource( @Qualifier("dataSourceProperties") DataSourceProperties properties) { return createDataSource(properties,org.apache.commons.dbcp2.BasicDataSource.class); }
/** * 主库配置(负责写) * @return */ @Bean(name="masterDataSource",initMethod="init") @Primary @ConfigurationProperties(prefix = "spring.datasource",locations = "classpath:application.properties") public DataSource writeDataSource() { log.info("-------------------- Master DataSource init ---------------------"); return DataSourceBuilder.create().type(dataSourceType).build(); }
/** * Conditionally constructs a new configuration for {@link StaticSeednodeProvider} if application doesn't provide its own {@link * Bean} of {@link StaticSeednodeProviderConfig} type. * * @return New configuration. */ @Bean @ConditionalOnMissingBean(StaticSeednodeProviderConfig.class) @ConfigurationProperties(prefix = "hekate.cluster.seed.static") public StaticSeednodeProviderConfig staticSeednodeProviderConfig() { return new StaticSeednodeProviderConfig(); }
/** * Conditionally constructs the configuration for a default failure detector if application doesn't provide its own {@link Bean} of * {@link FailureDetector} type. * * @return Configuration for {@link DefaultFailureDetector}. */ @Bean @ConfigurationProperties(prefix = "hekate.cluster.health") @ConditionalOnMissingBean({FailureDetector.class,DefaultFailureDetectorConfig.class}) public DefaultFailureDetectorConfig defaultFailureDetectorConfig() { return new DefaultFailureDetectorConfig(); }
/** * Constructs the {@link ClusterServiceFactory}. * * @param failureDetector Failure detector. * * @return Service factory. */ @Bean @ConfigurationProperties(prefix = "hekate.cluster") public ClusterServiceFactory clusterServiceFactory(Optional<FailureDetector> failureDetector) { ClusterServiceFactory factory = new ClusterServiceFactory(); failureDetector.ifPresent(factory::setFailureDetector); listeners.ifPresent(factory::setClusterListeners); splitBrainDetector.ifPresent(factory::setSplitBrainDetector); acceptors.ifPresent(factory::setAcceptors); seednodeProvider.ifPresent(factory::setSeednodeProvider); return factory; }
@Bean @ConfigurationProperties(prefix="app.alisms") public AlismsClient alismsClient() { return new AlismsClient(); }
@Bean @ConfigurationProperties(prefix = "tx.redis") public JedisPoolConfig getRedisPoolConfig() { return new JedisPoolConfig(); }
@Bean("commonDruidDataProperties") @ConfigurationProperties(prefix = "spring.datasource.common") public Map<String,String> beautyDruidDataProperties() { return new HashMap<String,String>(); }
@Bean @ConfigurationProperties(prefix = "wechat") public ClientResources wechat() { return new ClientResources(); }
@Bean @ConfigurationProperties(prefix = "spring.datasource5") public DataSourceProperties dataSource5Properties() { return new DataSourceProperties(); }
@Bean @ConfigurationProperties(prefix = "spring.datasource5.hikari") public HikariDataSource dataSource5(@Qualifier("dataSource5Properties") DataSourceProperties properties) { return createDataSource(properties,HikariDataSource.class); }
关于Spring Boot @ConfigurationProperties YAML引用和springboot引用配置文件的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Kotlin和Spring Boot @ConfigurationProperties、org.springframework.boot.configurationsample.ConfigurationProperties的实例源码、org.springframework.boot.context.properties.ConfigurationPropertiesBinding的实例源码、org.springframework.boot.context.properties.ConfigurationProperties的实例源码等相关知识的信息别忘了在本站进行查找喔。
本文标签: