我的情况是我有一个属性文件来配置未知数量的bean:
rssfeed.source[0]=http://feed.com/rss-news.xml
rssfeed.title[0]=Sample feed #1
rssfeed.source[1]=http://feed.com/rss-news2.xml
rssfeed.title[1]=Sample feed #2
:
我有一个配置类来读取这些属性:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "rssfeed", locations = "classpath:/config/rssfeed.properties")
public class RssConfig {
private List<String> source = new ArrayList<String>();
private List<String> title = new ArrayList<String>();
public List<String> getSource() {
return source;
}
public List<String> getTitle() {
return title;
}
@PostConstruct
public void postConstruct() {
}
}
这很好。但是,现在我想基于此创建bean。到目前为止,我尝试过的是
@Bean
方法并从中调用postConstruct()
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public SourcePollingChannelAdapter createFeedChannelAdapter(int id, String url) {
SourcePollingChannelAdapter channelAdapter = new SourcePollingChannelAdapter();
channelAdapter.setApplicationContext(applicationContext);
channelAdapter.setBeanName("feedChannelAdapter" + id);
channelAdapter.setSource(createMessageSource(id, url));
return channelAdapter;
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public FeedEntryMessageSource createMessageSource(int id, String url) {
try {
FeedEntryMessageSource messageSource = new FeedEntryMessageSource(new URL(url), "");
messageSource.setApplicationContext(applicationContext);
messageSource.setBeanName("feedChannelAdapter" + id + ".source");
return messageSource;
} catch (Throwable e) {
Utility.throwAsUncheckedException(e);
return null;
}
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public QueueChannel createFeedChannel(int id, String url) {
QueueChannel channel = new QueueChannel();
channel.setApplicationContext(applicationContext);
channel.setBeanName("feedChannel" + id);
return channel;
}
@PostConstruct
public void postConstruct() {
for (int x = 0; x < source.size(); x++) {
createFeedChannelAdapter(x, source.get(x));
}
}
但是,Spring尝试将参数自动连接到那些方法,而不使用我在中提供的参数postConstruct()
。
BeanFactoryPostProcessor
或一个BeanDefinitionRegistryPostProcessor
。但是,这里我没有RssConfig
从上面访问properties-file或-bean的权限,因为在生命周期中调用它太早了。我需要做什么来生成那些动态数量的bean?我可能只有一步之遥了……我更喜欢Java配置解决方案而不是XML解决方案。
您需要注册的bean定义(不叫@Bean
方法),所以BeanDefinitionRegistryPostProcessor
还是ImportBeanDefinitionRegistrar
要做到这一点目前最好的办法。您可以获取属性文件并使用PropertiesConfigurationFactory
(在Spring
Boot中)而不是使用进行绑定@ConfigurationProperties
,或者您可以使用父上下文或独立上下文SpringApplication
来创建并绑定您RssConfig
的bean定义注册代码。
我在用Pandas将。txt文件转换为浮动值的数据目录时遇到了麻烦。我需要创建两列数据的散点图,但我一直得到错误“TypeError:Empty'DataFrame':no numeric data to plot”,所以我认为它是以字符串的形式读取数据。 下面是我运行df.info时得到的结果 列u_Vmag和u_B-V中没有任何测量值。 我觉得我只是错过了一些显而易见的东西。有人有什么建议吗?
我继承了一个旧的(15年)Java应用程序,它维护得很糟糕。Mavenizing没有正确地完成,所以我尝试了一下,因为很多库都是手工添加到类路径中的。现在我有了一个主pom,在pom文件中有所有的库作为依赖项。 错误如下: 我已经升级到Java8(也在Liberty Profile上运行,因为我们使用IBM JDK 8绑定到IBM)。添加了jaxp-api以获得类路径上的'Access Exter
我试图实现的是在application.yml文件上指定一个目录,该目录直接位于类路径上(在/resources下)。我希望能有这样的东西: 使用这种方法,IDE将始终默认为application-dev.yml。当我通过gradle构建应用程序,并在传递命令行参数的同时运行它时,我可以指定配置文件,从而加载适当的文件。理想情况下,能够做到这一点: java-jar-dspring.profile
我正在尝试在Hive中创建一个表。需要帮助。 示例代码:创建外部表table1(id字符串、名称字符串、“12489738”字符串、“12492628”字符串、“12492633”字符串、“12492638”字符串、“12492655”字符串、“12492659”字符串)行格式分隔字段,由“\t”LOCATION“”tblproperties(“skip.header.line.count”=“1
最后,我使用IDF类将IDF权重应用于术语频率向量。 返回的数据帧的最终结果如下所示--仅显示第一行: 所以前三列是原来的['id'、'title'、'desc']。根据所使用的转换添加新列。如果您看到Tokeniser和StopWords工作正常,因为它们的输出列是正确的。
如何基于应用程序动态定义bean。yml文件? 例如,YAML文件如下所示: 这将动态创建两个带有内容类型标题集的HTTPHeader。 下面是我现在如何定义bean: 如果我需要添加更多endpoint,我需要复制并粘贴这些bean,这是我想要避免的。 注意:这些动态bean不需要任何其他bean。我不确定这是否有什么不同。它只需要加载配置。
我想在spring Boot中设置3个配置文件:production,development,test,使用外部配置文件。 应用程序类: AppConfig类: