Разрешение заполнителей в Spring MVC 3.2.8
У меня есть приложение, основанное на Spring Web модель-представление-контроллер (Spring MVC 3.2.8), и я хочу разрешить заполнитель
У меня есть файл application.properties
внутри папки /src/main/resources/config/
Это мой класс:
@Service("jobone")
@PropertySource("classpath:config/application.properties")
public class MyJobOne {
private static final Logger LOGGER = Logger.getLogger (MyJobOne.class);
private File localDirectory = new File("tmpFtpFiles");
private AbstractInboundFileSynchronizer<?> ftpInboundFileSynchronizer;
@Autowired
private SessionFactory myFtpSessionFactory;
private boolean autoCreateLocalDirectory = true;
private boolean deleteLocalFiles = true;
private String fileNamePattern="*.*";
@Value("${ftpRemoteDirectory}")
private String remoteDirectory;
...
}
Но я получил эту ошибку при запуске приложения.
Caused By: java.lang.IllegalArgumentException: Could not resolve placeholder 'ftpRemoteDirectory' in string value "${ftpRemoteDirectory}"
Я тоже пробовал @PropertySource("classpath:/config/application.properties")
с тем же результатом
Я также попытался поместить это в 1 из моих классов конфигурации:
@Configuration
@PropertySource("classpath:/config/application.properties")
public class FtpConfiguration {
@Autowired
private SessionFactory myFtpSessionFactory;
@Bean
@Scope(value="step")
public FtpGetRemoteFilesTasklet myFtpGetRemoteFilesTasklet()
{
FtpGetRemoteFilesTasklet ftpTasklet = new FtpGetRemoteFilesTasklet();
ftpTasklet.setRetryIfNotFound(true);
ftpTasklet.setDownloadFileAttempts(3);
ftpTasklet.setRetryIntervalMilliseconds(10000);
ftpTasklet.setFileNamePattern("README");
//ftpTasklet.setFileNamePattern("TestFile");
ftpTasklet.setRemoteDirectory("/");
ftpTasklet.setLocalDirectory(new File(System.getProperty("java.io.tmpdir")));
ftpTasklet.setSessionFactory(myFtpSessionFactory);
return ftpTasklet;
}
@Bean
public SessionFactory myFtpSessionFactory()
{
DefaultFtpSessionFactory ftpSessionFactory = new DefaultFtpSessionFactory();
ftpSessionFactory.setHost("la.mare.superiora");
ftpSessionFactory.setClientMode(0);
ftpSessionFactory.setFileType(0);
ftpSessionFactory.setPort(1029);
ftpSessionFactory.setUsername("carbonell");
ftpSessionFactory.setPassword("nicinc");
return ftpSessionFactory;
}
}
2 ответа
Попробуй это.
@PropertySource("classpath:/config/application.properties") in your confiuration class.
Вы должны добавить @PropertySource
в вашем классе конфигурации, как это
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@Configuration
@PropertySource(value = { "classpath:/config/application.properties" })
public class AppConfig {
/*
* PropertySourcesPlaceHolderConfigurer Bean only required for @Value("{}") annotations.
* Remove this bean if you are not using @Value annotations for injecting properties.
*/
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
а не в сервисном классе.
Также обратите внимание на bean-компонент PropertySourcesPlaceHolderConfigurer, который необходим, когда вы хотите внедрить свойства, используя @Value("{}")
, Вы можете удалить его, как указано в комментарии, если вы не хотите вводить свойства, используя @Value("{}")
но хотите добавить свойства, используя новый API среды.
Это должно решить вашу проблему. Вы можете узнать больше здесь и здесь