2016-08-02 13 views
0

Ich habe eine einfache WebSocket eingerichtet und versuchen, Daten zu speichern. Irgendwie werden die Daten nicht beibehalten. Ich bekomme keine Fehlermeldungen und das Objekt wird korrekt an den Client zurückgegeben. Wenn ich versuche, das Objekt mit einem REST-Controller und einer REST-Anforderung zu speichern, funktioniert es.Spring Boot speichern Daten mit WebSockets

Hier sind die Abhängigkeiten von meiner build.gradle Datei:

dependencies { 
compile 'org.springframework.boot:spring-boot-starter-web' 
compile 'org.springframework.boot:spring-boot-starter-data-jpa' 
compile 'org.springframework.boot:spring-boot-starter-websocket' 
compile 'org.springframework:spring-messaging' 
compile 'com.google.code.gson:gson:1.7.2' 
compile 'org.postgresql:postgresql:9.4-1200-jdbc41' 
compile 'commons-dbcp:commons-dbcp:1.4' 
testCompile('org.springframework.boot:spring-boot-startet-test') 
} 

PersonController

@Controller 
public class PersonController { 

    @Autowired 
    PersonRepository personRepository; 

    @MessageMapping("/test") 
    @SendTo("/response/test") 
    public Person test() throws Exception { 
     Person person = new Person(); 
     person.setName("John Doe"); 
     return personRepository.save(person); 
    } 
} 

Konfiguration für STOMP Messaging

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/response"); 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/websocket") 
       .setAllowedOrigins("*") 
       .withSockJS(); 
    } 

Entität Person

@Entity 
public class Person { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    private String name; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return getName; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Base-Repository

@NoRepositoryBean 
public interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID> { 

    void delete(T deleted); 

    void delete(ID id); 

    Iterable<T> findAll(); 

    T findOne(ID id); 

    T save(T persisted); 

    Iterable<T> save(Iterable<T> persited); 
} 

Person Repository

public interface PersonRepository extends 
     BaseRepository<Person, Serializable> { 
} 
  • Gibt es eine probl em in meinem Code?
  • Gibt es ein Problem mit dem Caching? Muss ich eine Spülung erzwingen?
  • Werden Daten mit WebSockets gespeichert, die von SpringBoot unterstützt werden?
  • Kennen Sie Beispiele für das Speichern von Daten? Ich konnte nur grundlegende Beispiele finden, ohne Daten zu speichern.
+0

Werden die Daten mit WebSockets von SpringBoot unterstützt Speicherung? Ja, es gibt keine solche Einschränkung, da ich eine Anwendung in der Produktion habe, wo Daten vom Browser auf dem Websocket zum Springboot-Backend geschickt werden und die Geschäftslogik einschließlich Insertion, Update etc –

Antwort

0

Das Problem war in meiner Persistenzkonfiguration. Ich habe die Konfiguration von einer Java-Implementierung in die Datei application.properties geändert. Ich denke, es gab ein Problem mit meinem Transaktionsmanager.

Um vollständig zu sein, hier ist meine aktuelle Datei application.properties:

spring.datasource.url = jdbc:postgresql://localhost:5432/test 
spring.datasource.username = test 
spring.datasource.password = test 

spring.datasource.testWhileIdle = true 
spring.datasource.validationQuery = SELECT 1 
spring.jpa.show-sql = true 
spring.jpa.hibernate.ddl-auto = create 

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy 

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect