Web*_*net 0 java spring annotations
这是我的应用程序:
public static void main( String[] args ) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
//run the importer
final ImportNewOrders importer = (ImportNewOrders) ApplicationContextProvider.getApplicationContext().getBean("importNewOrders");
importer.run();
//importer.runInBackground();
}
Run Code Online (Sandbox Code Playgroud)
这是我的配置:
@Configuration
@ComponentScan(basePackages = {
"com.production"
})
@PropertySource(value = {
"classpath:/application.properties",
"classpath:/environment-${MY_ENVIRONMENT}.properties"
})
@EnableJpaRepositories("com.fettergroup.production.repositories")
@EnableTransactionManagement
public class Config {
.... skipping things that aren't relevant
@Bean
public ImportNewOrders importNewOrders() {
return new ImportNewOrders();
}
Run Code Online (Sandbox Code Playgroud)
这是我的班级......
@Component
public class ImportNewOrders implements Task {
private final static Logger logger = Logger.getLogger(ImportNewOrders.class.getName());
@Autowired
private OrderService orderService;
@Autowired
private ImportOrderRequest importOrderRequest;
@Value("${api.user}")
private String apiUser;
@Value("${api.password}")
private String apiPassword;
@Value("${api.orders.pingFrequency}")
private String pingFrequency;
Run Code Online (Sandbox Code Playgroud)
最后application.properties:
# ------------------- Application settings -------------------
#Base URL to the API application
api.baseUrl=http://localhost:9998
#Unique token used to authenticate this vendor
api.vendor.token=asdf
#API credentials
api.user=myuser
api.password=mypassword
#How often to check for new orders; frequency is in seconds
api.orders.pingFrequency=60
Run Code Online (Sandbox Code Playgroud)
这工作一两个星期前,现在它决定它不喜欢这些价值观.我不知道为什么.一切看起来都对我不对.
更新
@Configuration
@ComponentScan(basePackages = {
"com.production"
})
@PropertySource(value = {
"classpath:/application.properties",
"classpath:/environment-${MY_ENVIRONMENT}.properties"
})
@EnableJpaRepositories("com.production.repositories")
@EnableTransactionManagement
public class Config {
@Value("${db.url}")
private static String PROPERTY_DATABASE_URL;
@Bean
public DataSource dataSource() {
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUrl(PROPERTY_DATABASE_URL); //is null
/*dataSource.setUser(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_USER));
dataSource.setPassword(environment.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));*/
return dataSource;
}
@Bean
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer () {
return new PropertySourcesPlaceholderConfigurer();
}
}
Run Code Online (Sandbox Code Playgroud)
您的属性文件由您找到,@Configuration并且正在将其用于该类中的数据库属性,因为@PropertySource.但是,@Value领域和${}评估需要更多.
为了使用PropertySource中的属性解析定义中的$ {...}占位符或@Value注释,必须注册PropertySourcesPlaceholderConfigurer.在XML中使用时会自动发生这种情况,但在使用@Configuration类时必须使用静态@Bean方法显式注册.有关详细信息和示例,请参阅@Configuration Javadoc的"使用外部化值"部分和@Bean Javadoc的"关于BeanFactoryPostProcessor返回@Bean方法的说明"部分.
所以宣布一个
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer();
p.setLocation(new ClassPathResource("your properties path"));
// other properties
return p;
}
Run Code Online (Sandbox Code Playgroud)
在您的配置类中,或者如果您使用完全@PropertySource省略的话,在评论中恰当地提到了ach setLocation:
@Configuration
@PropertySource(value="classpath:your_file.properties")
public class MyConfiguration{
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer();
return p;
}
}
Run Code Online (Sandbox Code Playgroud)
当你拥有环境时,你不应该需要环境 PropertySourcesPlaceholderConfigurer
但是,在大多数情况下,应用程序级bean不需要直接与Environment交互,而是可能必须将$ {...}属性值替换为属性占位符配置器,例如PropertySourcesPlaceholderConfigurer,它本身就是EnvironmentAware,并且当使用<context:property-placeholder />时,默认情况下会注册Spring 3.1.
| 归档时间: |
|
| 查看次数: |
2913 次 |
| 最近记录: |