Проблема запуска Spring Webapp на JBoss - PullRequest
2 голосов
/ 11 марта 2019

Когда я пытаюсь развернуть свой проект, возникает проблема с компонентом, я не смог ее решить, я прикрепил ошибку и класс, который ее генерирует. Мне нужна помощь, чтобы решить это, пожалуйста. Заранее благодарю.


Приложение не удалось запустить


Описание:

Отправителю поля в co.com.coomeva.golden.service.ws.main.GreetingController требуется компонент типа 'co.com.coomeva.golden.service.ws.jms.DistributorSender', который не может быть найден. Точка внедрения имеет следующие аннотации: - @ org.springframework.beans.factory.annotation.Autowired (обязательно = true) Действие: рассмотрите возможность определения bean-компонента типа «co.com.coomeva.golden.service.ws.jms.DistributorSender» в вашей конфигурации. 22: 41: 15,280 ОШИБКА [org.jboss.msc.service.fail] (Пул потоков ServerService - 69) MSC000001: Не удалось запустить службу jboss.undertow.deployment.default-server.default-host./Golden: org. jboss.msc.service.StartException в службе. : Неудовлетворенная зависимость, выраженная через поле «отправитель»; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'co.com.coomeva.golden.service.ws.jms.DistributorSender': ожидается как минимум 1 компонент, который считается кандидатом на автоматическое подключение. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true)} в org.wildfly.extension.undertow.deployment.UndertowDeploymentService $ 1.run (UndertowDeploymentService.java:84) в java.util.concurrent.Executors $ RunnableAdapter.call (Неизвестный источник) at java.util.concurrent.FutureTask.run (неизвестный источник) в java.util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (неизвестный источник) at java.lang.Thread.run (неизвестный источник) в org.jboss.threads.JBossThread.run (JBossThread.java:320) Вызвано: java.lang.RuntimeException: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем'reetingController ': Неудовлетворенная зависимость, выраженная через поле' sender '; вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'co.com.coomeva.golden.service.ws.jms.DistributorSender': ожидается как минимум 1 компонент, который считается кандидатом на автоматическое подключение. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true)} в io.undertow.servlet.core.DeploymentManagerImpl.deploy (DeploymentManagerImpl.java:241) в org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext (UndertowDeploymentService.java:99) в org.wildfly.extension.undertow.deployment.UndertowDeploymentService $ 1.run (UndertowDeploymentService.java:81) ... еще 6

    package co.com.coomeva.golden.service.ws.main;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import co.com.coomeva.golden.service.ws.jms.*;
import co.com.coomeva.golden.service.ws.model.GoldenResponse;

@Configuration
@ComponentScan
@EnableAutoConfiguration
@SpringBootApplication(scanBasePackages = { "co.com.coomeva.golden.service.ws.controllers", "co.com.coomeva.golden.service.ws.jms.DistributorSender"})
public class GoldenServiceApplication extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(applicationClass);
    }

    private static Class<GoldenServiceApplication> applicationClass = GoldenServiceApplication.class;
}

@RestController
class GreetingController {

    @Autowired
    private DistributorSender sender;

    @PostMapping("/distributor/records")
    public GoldenResponse setGoldenRecord(@RequestBody String goldenRecord) {
        GoldenResponse response = new GoldenResponse();

        try {
            sender.publishMessage(goldenRecord);
            response.setCode(HttpStatus.OK.value());
            response.setMessage("Golden Record Published");
        } catch (Exception e) {
            String error = e.getCause().toString();
            error = error.length() > 200 ? error.substring(0, 200) : error;
            response.setMessage("Golden Record was not published. Error:" + error);
        }

        return response;
    }

    @RequestMapping("/hello/{name}")
    String hello(@PathVariable String name) {
        return "Hello, " + name + "!";
    }

    @GetMapping("/Example2")
    public GoldenResponse exampleDist() {
        GoldenResponse goldenResponse = new GoldenResponse();
        goldenResponse.setCode(1);
        goldenResponse.setMessage("sd");
        System.out.println("Vinagre");
        return goldenResponse;
    }

}

Ответы [ 3 ]

1 голос
/ 11 марта 2019

Я воспроизвел вашу проблему. Ниже приведены изменения, которые необходимо внести:

  1. @SpringBootApplication(scanBasePackages ={"co.com.coomeva.golden.service.ws.jms","co.com.coomeva.golden.service.ws.main"})
  2. Вам нужно, чтобы ваша DistributorSender классная пружина знала с аннотации типа @Component или @Repository.

GoldenServiceApplication.java

@SpringBootApplication(scanBasePackages = {"co.com.coomeva.golden.service.ws.jms","co.com.coomeva.golden.service.ws.main"})
public class GoldenServiceApplication extends SpringBootServletInitializer 
{

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

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(applicationClass);
}

private static Class<GoldenServiceApplication> applicationClass = 
GoldenServiceApplication.class;
}

@RestController
class GreetingController {

@Autowired
private DistributorSender sender;

@PostMapping("/distributor/records")
public GoldenResponse setGoldenRecord(@RequestBody String goldenRecord) 
{
    GoldenResponse response = new GoldenResponse();

    try {
        sender.publishMessage(goldenRecord);
        response.setCode(HttpStatus.OK.value());
        response.setMessage("Golden Record Published");
    } catch (Exception e) {
        String error = e.getCause().toString();
        error = error.length() > 200 ? error.substring(0, 200) : error;
        response.setMessage("Golden Record was not published. Error:" + error);
    }

    return response;
}

@RequestMapping("/hello/{name}")
String hello(@PathVariable String name) {
    return "Hello, " + name + "!";
}

@GetMapping("/Example2")
public GoldenResponse exampleDist() {
    GoldenResponse goldenResponse = new GoldenResponse();
    goldenResponse.setCode(1);
    goldenResponse.setMessage("sd");
    System.out.println("Vinagre");
    return goldenResponse;
    }

}

и DistributorSender.java

package co.com.coomeva.golden.service.ws.jms;

import org.springframework.stereotype.Component;

@Component
public class DistributorSender {
private String record;

public void publishMessage(String record) {
    this.record = record;
}

}
0 голосов
/ 11 марта 2019

Удалите ненужные аннотации, @ComponentScan, @Configuration и @EnableAutoConfiguration

Только ниже приведенного кода достаточно для запуска вашего приложения, пока у вас нет каких-либо особых требований.

@SpringBootApplication
public class GoldenServiceApplication extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(applicationClass);
    }

    private static Class<GoldenServiceApplication> applicationClass = GoldenServiceApplication.class;
}
0 голосов
/ 11 марта 2019

Хорошая практика для приложений Spring-boot:

Сохраните ваш класс Application (класс с аннотацией @SpringBootApplication) в главном пакете и поместите все остальные *.java файлы в этот пакет, чтобы Spring Application мог их найти.

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