SpringBoot Не удалось разрешить заполнитель в Linux, отлично работает на Eclipse - PullRequest
0 голосов
/ 10 июня 2019

Моя программа SpringBoot 2.0.3 java 8 отлично работает на Eclipse Photon (с использованием Maven), однако, когда я встраиваю ее в jar-файл и устанавливаю в AWS Linux и запускаю там, я получаю:

2019-06-10 10:07:14.395  WARN 18316 --- [           main]s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ccWrapperApplication': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'tmp.dir' in value "${tmp.dir}"
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ccWrapperApplication': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'tmp.dir' in value "${tmp.dir}"

похоже, что spring не может найти переменные application.properties при работе в Linux. Почему нет?

tmp.dir определяется в src / main / resources / application.properties как:

tmp.dir=tmp

и ccWrapperApplication.java имеет:

@SpringBootApplication
// SpringBoot likes to use a database, we don't need one, so we exclude the default dB.
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})

public class CcWrapperApplication implements CommandLineRunner {

    @Value("${tmp.dir}")
    public  String tmpDir;

    public static void main(String[] args) {
        logger.info("running CcWrapperApplication on " + System.getProperty("os.name"))
        SpringApplication.run(CcWrapperApplication.class, args);
    }

    @Override
    public void run(String... args) {
    ...
    }

    public String getTmpDir() {
        return tmpDir;
    }

    public void setTmpDir(String tmpDir) {
        this.tmpDir = tmpDir;
    }

}

Я собрал jar приложения, используя eclipse: экспорт-> запускаемый файл JAR

Установил jar в Linux, добавил jar в CLASSPATH (и все jar SpringBoot) и запустил из сценария оболочки, используя:

java  com.clarivate.singulatiry.chemworkbench.chemcurator.chemcurator_wrapper.CcWrapperApplication $inputDir $outputDir 2>&1 >>$logfile | tee -a $logfile >>$errorfile

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Eclipse встроенный экспортер для генерации jar включает только файлы целевой папки, которые фактически генерируются в проекте.

Для того, чтобы иметь «толстый», «тонкий» (автономный исполняемый файл)jar / war, вы должны использовать плагин Spring Boot Maven или Gradle для "перепаковки" jar / war.

Этот может помочь вам в этом.

0 голосов
/ 10 июня 2019

Я использовал mvn install в соответствии с предложением @Malathi и создал тонкий jar-файл, используя предложенный здесь метод: thin jar , и он работал нормально, хотя я до сих пор не знаю, почему оригинальный метод не удался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...