目前我的春季启动应用程序中只有两个类。首先是主要的Boot Application类,另一个是服务类。我在Application类中声明了属性源文件,如下所示:
@SpringBootApplication
@PropertySource("classpath:ftp.properties")
public class Application
{
public static void main(String[] args) throws JSchException, SftpException, IOException
{
SpringApplication.run(Application.class, args);
FTPService ftpservice = new FTPService();
ftpservice.ftp();
}
}
其他类是FTPService,其中使用@Value注入的属性值如下:
public class FTPService
{
@Value("${vendor1.server}")
private String VENDOR1_SERVER;
public boolean ftp() throws JSchException, SftpException, IOException
{
boolean success = false;
System.out.println("vendor1.server : " + VENDOR1_SERVER);
return success;
}
}
它打印为空。尝试使用以下注释注释FTPService,但没有工作。 尝试将属性复制到application.properties但没有工作。
@Configuration
@PropertySource("classpath:ftp.properties")
我的属性文件位于src / main / resources下。它的名字是ftp.properties,内容如下:
vendor1.server = server.com
我的gradle app是以下配置:
plugins {
id 'org.springframework.boot' version '1.5.6.RELEASE'
id 'java'
}
group = groupName
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
compileJava.options.encoding = 'UTF-8'
repositories {
mavenCentral()
}
configurations.all {
exclude group: 'commons-logging', module: 'commons-logging'
exclude group: 'log4j', module: 'log4j'
exclude group: 'org.slf4j', module: 'slf4j-jdk14'
exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
configurations {
all*.exclude module : 'spring-boot-starter-logging'
}
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: bootVersion
compile group: 'com.jcraft', name: 'jsch', version: jschVersion
compile group: 'javax.servlet', name: 'javax.servlet-api', version: servletVersion
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4jVersion
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4jVersion
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: log4jVersion
compile group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion
compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: slf4jVersion
compile group: 'org.slf4j', name: 'log4j-over-slf4j', version: slf4jVersion
compile group: 'org.slf4j', name: 'jul-to-slf4j', version: slf4jVersion
testCompile group: 'junit', name: 'junit', version: junitVersion
}
我是否缺少任何注释或指定属性文件的正确方法?
答案 0 :(得分:1)
属性注入在您的示例中不起作用,因为您使用new
关键字手动创建对象。属性注入仅适用于Spring容器管理的对象。
使用@Service
注释FTPService类,然后将该bean注入您想要执行ftp()
方法的某个位置。在这种情况下,main
方法无法正常工作。
答案 1 :(得分:0)
FTPService
@Component
@SpringBootApplication
@PropertySource("classpath:ftp.properties")
public class Application implements CommandLineRunner
{
@Autowired
FTPService ftpService;
@Override
public void run(String... strings) throws Exception {
ftpService.ftp();
}
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}