Wie kann ich Netty in Spring MVC konfigurieren. Wann und wo soll ich den Netty TCP Server starten? Soll ich netty beginnen, wenn der Frühling beginnt? Könnte mir jemand ein Beispiel wie die Spring-Konfigurations-XML-Datei oder etwas eles zeigen? Danke!Kombinieren Netty und Spring MVC
Antwort
Erstellen Sie einfach eine Bohne mit start
und stop
Methoden, die den Netty Servers zum Starten und Herunterfahren verantwortlich sind und dann die Bohne im Zusammenhang mit dem entsprechenden init registrieren und Haken zerstört, zum Beispiel:
<bean id="myNettyServer" class="x.y.z.MyNettyServer" init-method="start" destroy-method="shutdown"/>
Or Alternativ können Sie @PostConstruct
und @PreDestroy
Annotationen verwenden, wenn Sie die XML-Konfiguration nicht verwenden möchten.
Vielen Dank! Es hilft sehr! – lute
Es hängt wirklich davon ab, was Sie Netty für verwenden. Angenommen, Sie verwenden es als eingebetteten HTTP-Server, der auf einem separaten Port ausgeführt wird, können Sie es einfach in einer Spring-Bean initialisieren. Ich habe dies in der Vergangenheit erreichen einen nützlichen Netty/Atmosphere Wrapper Nettosphere genannt werden:
@Service
public class NettyServer implements ServletContextAware {
private ServletContext servletContext;
private Nettosphere server;
@Autowired
private MyStatusHandler statusHandler;
@PostConstruct
public void initialiseNettyServer() {
String rootPath = servletContext.getContextPath() + "/api";
server = new Nettosphere.Builder().config(
new Config.Builder()
.host(SERVER_HOST)
.port(SERVER_PORT)
.resource(rootPath + "/status", statusHandler)
.build())
.build();
server.start();
}
@PreDestroy
public void shutdownNettyServer() {
server.stop();
}
}
Dies setzt voraus, die annotation-based configuration im Frühjahr, können Sie einfach das gleiche Ergebnis erzielen unter Verwendung von XML als in Jonathan's Antwort erklärt.
Natürlich bevorzugen Sie vielleicht Netty direkt zu verwenden, in diesem Fall gilt das gleiche Prinzip, aber Sie müssen in die Netty user guide ein wenig graben, um den Server korrekt zu laden.
Es macht wirklich Sinn. Vielen Dank! – lute
Option 1 (Nur der Code):
Hier ist ein wirklich gutes Beispiel dafür, wie Netty Bootstrap mit einem Handler unterstützt Servlets (was wiederum den Job zu Spring MVC delegieren) https://github.com/rstoyanchev/netty-spring-mvc
Sie Es definieren ServletNettyHandler und Java-basiert Spring MVC configurer (DispatcherServletChannelInitializer) und die Testcontroller verwendet @Controller & @RequestMapping Anmerkungen wie immer in diesen Fällen.
Hinweise: Aktualisieren Sie Netty & Spring-Version des Beispiels, um es zu arbeiten.
Option 2 (Nur der Blog-Post):
ich einen Blog-Post gefunden habe, der den Prozess. http://www.hypersocket.com/content/?p=12
Beide Links sind tot –
Blick auf das Cruzeira Projekt, das Netty.io zu Spring Framework Implementierung einer Teilmenge der Servlet API https://github.com/fabiofalci/cruzeira
Eigentlich mit Feder 5 Sie eine Spring 5 Webflux Anwendung statt, es sieht aus wie eine robuste reaktive Alternative bringt konfigurieren . Die folgenden Zeilen (Config.start()
) führen einen kleinen HTTP-Server parallel zur Hauptausführung mit einem Spring-Kontext aus.
@Configuration
public class Config extends DelegatingWebFluxConfiguration{
@Bean
String test(){
return "Hello WOrLd";
}
@Bean
AdminController controller(){
return new AdminController();
}
public static void start() {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
HttpHandler handler = WebHttpHandlerBuilder.applicationContext(applicationContext).build();
ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(handler);
HttpServer.create("0.0.0.0", 8082).newHandler(adapter).subscribe();
}
}
Controller-Code:
@RestController
public class AdminController {
@Autowired
String text;
@GetMapping(path = "/commands")
Mono<String> commands(){
return Mono.just(text);
}
}
build.gradle
compile 'org.springframework:spring-context:5.0.2.RELEASE'
compile 'org.springframework:spring-web:5.0.2.RELEASE'
compile 'org.springframework:spring-webflux:5.0.2.RELEASE'
compile 'io.projectreactor.ipc:reactor-netty:0.7.2.RELEASE'
P.S. In diesem Beispiel wird nur Spring ohne Spring Boot verwendet, was genauso gut wie ein Side-Embedded-Webserver ist, aber Sie sollten Spring Boot für eine vollwertige Microservice-Entwicklung in Betracht ziehen.
- 1. Ajaxupload und Spring MVC
- 2. Spring MVC und Angularjs
- 3. Spring MVC und Checkboxen
- 4. Spring MVC und MogoTemplate
- 5. Spring Security, Spring MVC und Login-Sitzungen
- 6. Spring MVC und Prototyp JavaScript
- 7. Spring MVC und Template-Variablen
- 8. Spring MVC @RestController und Redirect
- 9. Datenkürzungs Ausnahmen und Spring MVC
- 10. Spring-mvc-Controller und Ausnahmebehandlung
- 11. Spring MVC und benutzerdefinierte Tags
- 12. Spring MVC und JSR 303
- 13. AngularJS und Spring MVC-webflow
- 14. ASP.NET MVC - Skript Kombinieren
- 15. Wird der Frühling jemals MVC und WebFlow kombinieren?
- 16. Kombinieren Interceptor-Validierung und Controller-Validierung im Frühjahr MVC
- 17. Spring MVC
- 18. Kombinieren und Reduzieren von JS und CSS in ASP.NET MVC
- 19. Spring Rest Repository Builder wie Spring Roo und MVC
- 20. Spring Web MVC, @ModelAttribute und @RequestParam zusammen
- 21. jQuery load() und Spring 3 MVC
- 22. Spring MVC: RequestMapping Klasse und Methode
- 23. vergleichen spring mvc 3 und struts 2
- 24. SPRING MVC Daten und Passwort-Validierung
- 25. Dynamische Form und Datenbindung mit Spring MVC
- 26. Spring MVC und Flex-Integration über BlazeDS?
- 27. Spring MVC: Fehlerseiten und Principal Information
- 28. Serving sitemap.xml und robots.txt mit Spring MVC
- 29. etwas Seltsames mit Spring MVC und Eclipse
- 30. Datei mit Spring mvc und MockMVC hochladen
Die bessere Frage nicht wie, aber macht es Sinn? Siehe http://stackoverflow.com/questions/18374277/combine-netty-and-spring-mvc – Maksym