2015-01-17 3 views
0

Я пытаюсь расширить этот пример: https://github.com/scratches/jpa-method-security-sample, добавив метод в контроллер для «регистрации», когда новый пользователь динамически добавляется к репо. Набор по умолчанию существующих пользователей добавляется в скрипт import.sql. Тем не менее, я вижу, что мой динамически добавленный пользователь обрывается при перезапуске сервера. Не могли бы вы указать мне, как убедиться, что таблица постоянно обновляется.Spring JPA, как убедиться, что данные записываются в постоянное хранилище

Вот мой код для метода Регистрация:

@RequestMapping(value = "signup",method = RequestMethod.GET) 
    public String signup(Map<String, Object> model) { 
     model.put("message","Sign up!"); 
     model.put("title", "Hello Signup"); 
     model.put("date", new Date()); 
     users.createUser(); 
     return "signup"; 
    } 

public void createUser() { 
    User u = new User(); 
    u.setName("xxx"); 
    u.setPassword("spring"); 
    repo.save(u); 
} 

Я также внес изменения в loadUserByUserName вернуть правильные полномочия для нового пользователя. Это отлично работает для одного сеанса сервера, и я могу войти в систему с новым пользователем. Однако при перезапуске сервера пользователь должен быть повторно добавлен. Я хочу предотвратить это.

У меня такое ощущение, что мне нужно сделать что-то более сложное, например, настроить постоянный источник данных. Если это так, не могли бы вы указать мне на какой-то ресурс, который использует java config для этого. Я только начинаю весной, и это может быть основной вопрос и все, что я читаю, я не уверен, что следует делать.

+0

Вы используете Spring Boot? – chrylis

ответ

0

Поскольку вы используете встроенную базу данных данных базы данных H2, данные не сохраняются заново. Вы должны отойти от встроенной БД, и поскольку приложение основано на spring-boot, вы можете легко перенастроить его и использовать, например, mysql, добавив зависимость mysql к pom.

<dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
    </dependency> 

и соответствующие свойства БД внутри application.properties например

spring.datasource.url=jdbc:mysql://localhost/[YOUR DB] 
spring.datasource.username=[YOUR USERNAME] 
spring.datasource.password=[YOUR PASSWORD] 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

Другое, что нужно помнить, определенные значения по умолчанию специфичны для встроенных БД, таких как H2 DB. Например, ddl-auto property is set to create-drop.

Это означает, что схема БД будет создана, когда SessionFactory будет создан и сброшен, когда он будет закрыт.

Значение этого свойства, например. MySql устанавливаются в ни по умолчанию, это означает, что вы должны сначала запустить приложение переопределяет свойство (settting его в application.properties)

spring.jpa.hibernate.ddl-auto: create 

это будет изначально создавать данные из import.sql. После первого запуска измените свойство на обновление, и данные будут сохраняться при перезапуске

+0

Большое спасибо! Работает отлично. Я создал MySql, создал db и включил все изменения. Только один вопрос. Если я хочу сделать что-то подобное в моем фактическом проекте, основанном на граде, я должен добавить зависимость, например: http: //mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.6, указанную под градием справа? – doomguy

+0

np, рад, что это помогло, и по поводу вашего вопроса, yeps, просто используйте синтаксис зависимости gradle –

+0

Извините, но когда я пытаюсь сделать что-то подобное в своем проекте gradle, у меня возникает проблема. Мой проект на основе H2 находится здесь: https://github.com/devdeep1987/MutiboProject/tree/master/MutiboServer. Я удалил h2 dependecy в build.gradle и добавил компиляцию («mysql: mysql-connector-java: 5.1.6») и добавил свойства в application.properties, но при запуске я получаю ошибку, которую я вставлял здесь: http : //pastebin.com/4cS9Dk0U.Интересно, нужно ли мне что-то сделать для настройки зависимости mysql – doomguy

Смежные вопросы