У меня есть веб-приложение на SpringBoot, но оно также обрабатывает указанный протокол c, и оно запускается с ServerSocket, который ожидает подключения и обрабатывает его должным образом. Ниже приведен пример того, как я делаю это:
public class MyServer extends Thread {
@Autowired
private MyRepository myRepo;
public MyServer() {
start();
}
public run() {
ServerSocket server = new ServerSockey(7000);
while (true) {
Socket sock = server.accept();
...
// Handle connection here
myRepo.findById(1);
...
}
}
}
Мой репозиторий:
@Repository
public interface MyRepository extends JpaRepository<MyModel, Long> {
}
И мой основной метод, который запускает его:
@SpringBootApplication(exclude= {SecurityAutoConfiguration.class})
@ComponentScan(basePackages={"myComponentPackages"})
@EnableJpaRepositories(basePackages= {"myRepositoriesPackages"})
public class Main {
public static void main(String[] args) {
new MyServer();
SpringApplication springApp = new SpringApplication(Main.class);
springApp.setBannerMode(Banner.Mode.OFF);
springApp.run(args);
}
}
Конечно, у меня есть намного больше, например, контроллеры, репозитории и т. Д. c., Но это служит примером того, что мне нужно. В этом случае мне нужно получить доступ к экземпляру MyRepository на MyServer, но, поскольку он не входит в область действия контроллера, который вызывается при запросе к веб-серверу, аннотация @Autowired не работает, а переменная myRepo всегда как ноль. Вопрос в следующем: как получить доступ к этому хранилищу вне контекста вызова покоя?
Любые советы?
Заранее спасибо, Леандро