无法在spring boot application

时间:2017-09-06 11:13:44

标签: java spring-mvc spring-boot properties

目前我的春季启动应用程序中只有两个类。首先是主要的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
}

我是否缺少任何注释或指定属性文件的正确方法?

2 个答案:

答案 0 :(得分:1)

属性注入在您的示例中不起作用,因为您使用new关键字手动创建对象。属性注入仅适用于Spring容器管理的对象。

使用@Service注释FTPService类,然后将该bean注入您想要执行ftp()方法的某个位置。在这种情况下,main方法无法正常工作。

答案 1 :(得分:0)

  1. 使用FTPService
  2. 注释@Component
  3. 将您的主要课程改为
  4. @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);
        }
    
    }