Не удалось выполнить CommandLineRunner в файле JAR - PullRequest
0 голосов
/ 25 января 2019

У меня проблема с запуском приложения в файле .jar.Когда я запускаю его в IntelliJ, у меня нет никаких проблем.Это результат запуска моего приложения .jar Как я могу это исправить?Я использую JsonNode и restTemplate для получения информации от json и создания объекта.

Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:816) ~[spring-boot-2.1.2.RELEASE.jar!/:2.1.2.RELEASE]
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797) ~[spring-boot-2.1.2.RELEASE.jar!/:2.1.2.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:324) ~[spring-boot-2.1.2.RELEASE.jar!/:2.1.2.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) ~[spring-boot-2.1.2.RELEASE.jar!/:2.1.2.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) ~[spring-boot-2.1.2.RELEASE.jar!/:2.1.2.RELEASE]
        at com.rafalpodgorski.weatherclient.WeatherClientApplication.main(WeatherClientApplication.java:17) ~[classes!/:0.0.1-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[weatherclient-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[weatherclient-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) ~[weatherclient-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) ~[weatherclient-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
Caused by: org.springframework.web.client.HttpClientErrorException$NotFound: 404 Not Found
        at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:85) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
        at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
        at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
        at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
        at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:777) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:735) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:669) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
        at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:310) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]
        at com.rafalpodgorski.weatherclient.service.TemperatureService.getTemperature(TemperatureService.java:42) ~[classes!/:0.0.1-SNAPSHOT]
        at com.rafalpodgorski.weatherclient.service.TemperatureService.getTemperatureByCityName(TemperatureService.java:31) ~[classes!/:0.0.1-SNAPSHOT]
        at com.rafalpodgorski.weatherclient.WeatherClientApplication.getTemperatureForCity(WeatherClientApplication.java:24) ~[classes!/:0.0.1-SNAPSHOT]
        at com.rafalpodgorski.weatherclient.WeatherClientApplication.lambda$run$0(WeatherClientApplication.java:37) ~[classes!/:0.0.1-SNAPSHOT]
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813) ~[spring-boot-2.1.2.RELEASE.jar!/:2.1.2.RELEASE]
        ... 13 common frames omitted

Мой беговой класс:

@SpringBootApplication(scanBasePackages = "com.application")
public class WeatherClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(WeatherClientApplication.class, args);
    }

    private static Temperature getTemperatureForCity(TemperatureService temperatureService, String city) {
        if (city.equals("auto")) {
            return temperatureService.getTemperatureByGeolocation();
        } else {
            return temperatureService.getTemperatureByCityName(city);
        }
    }

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }

    @Bean
    public CommandLineRunner run(TemperatureService temperatureService) {
        return args -> {
            for (String city : ConfigReader.readConfig()) {
                Temperature temperature = getTemperatureForCity(temperatureService, city);
                System.out.println(temperature);
                temperatureService.saveTemperature(temperature);
            }
        };
    }
}

TemperatureService:

@Service
public class TemperatureService {

    private RestTemplate restTemplate;
    private GeolocationService geolocationService;

    public TemperatureService(RestTemplate restTemplate, GeolocationService geolocationService) {
        this.restTemplate = restTemplate;
        this.geolocationService = geolocationService;
    }

    public Temperature getTemperatureByCityName(String cityName) {
        String url = String.format("http://api.openweathermap.org/data/2.5/weather?q=%s&APPID=%s&units=metric", cityName, API_KEY);
        return getTemperature(url);
    }

    public Temperature getTemperatureByGeolocation() {
        Location location = geolocationService.getCoords();
        double lat = location.getLat();
        double lng = location.getLng();
        String url = String.format("http://api.openweathermap.org/data/2.5/weather?lat=%.2f&lon=%.2f&APPID=%s&units=metric", lat, lng, API_KEY);
        return getTemperature(url);

    }

    private Temperature getTemperature(String url) {
        JsonNode info = restTemplate.getForObject(url, JsonNode.class);
        String cityName = info.get("name").asText();
        int temperature = info.get("main").get("temp").asInt();
        return new Temperature(cityName, temperature);
    }


}

Я думаючто-то не так с JsonNode, потому что, когда я использовал map для отображения, эта проблема не возникала.

1 Ответ

0 голосов
/ 25 января 2019

Если вы посмотрите на свою трассировку стека ошибок.

Показывает 404 Not Found Исключение.(посмотрите на свою трассировку стека, которую вы опубликовали).

Caused by: org.springframework.web.client.HttpClientErrorException$NotFound: 404 Not Found
        at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:85) ~[spring-web-5.1.4.RELEASE.jar!/:5.1.4.RELEASE]

это означает, что REST-Api, который вы пытаетесь использовать, недоступен.

Теперь перейдите к этой строке кода (то, что выпопробуйте сделать) ..

private Temperature getTemperature(String url) {
        JsonNode info = restTemplate.getForObject(url, JsonNode.class);  //url not Found.
        String cityName = info.get("name").asText();
        int temperature = info.get("main").get("temp").asInt();
        return new Temperature(cityName, temperature);
    }

здесь в приведенном выше коде нет ответа от url (Причина: недоступна).После получения null в качестве ответа вы пытаетесь разобрать.

здесь нет обработчика исключений, который может обработать это 404 Exception.поэтому исключение должно обрабатываться обработчиком по умолчанию jvm.

Подробнее о коде ответа об ошибке 404 Нажмите здесь

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