Spring Security - таблицы по умолчанию не созданы
Я пытаюсь интегрировать Spring Social поверх Spring Security в приложении Spring Boot. Но, похоже, у Spring Security возникают проблемы при создании таблиц по умолчанию, например, UserConnection, UserProfile и т. Д., Поскольку я получаю эти ошибки SQL после успешного установления соединения с поставщиком oauth2:
PreparedStatementCallback; bad SQL grammar [select userId from UserConnection where providerId = ? and providerUserId = ?]; nested exception is org.h2.jdbc.JdbcSQLException: Tabelle "USERCONNECTION" nicht gefunden Table "USERCONNECTION" not found; SQL statement: select userId from UserConnection where providerId = ? and providerUserId = ? [42102-185]
Это статический вызов SQL в пружине, предоставляемой JdbcUsersConnectionRepository. Я попытался переключиться на реализацию InMemory, которая позволяет избежать проблемы SQL, но затем происходит следующее:
PreparedStatementCallback; bad SQL grammar [INSERT into userProfile(userId, email, firstName, lastName, name, username) values(?,?,?,?,?,?)]; nested exception is org.h2.jdbc.JdbcSQLException: Tabelle "USERPROFILE" nicht gefunden Table "USERPROFILE" not found; SQL statement: INSERT into userProfile(userId, email, firstName, lastName, name, username) values(?,?,?,?,?,?) [42102-185]
Таблица USERPROFILE также отсутствует.
До того, как я отправлю тонны фрагментов конфигурации, вы уже знаете что-то, что я, возможно, забыл, что говорит Spring создать эти таблицы для меня?:)
Сейчас я использую стандартную базу данных Spring Boot H2 в памяти, которая хорошо работает с JpaRepositories.
Благодарю вас!:)
1 ответ
Сам нашел решение:)
В конце концов я обнаружил, что самое первое, что не обрабатывается каким-то изощренным автоматическим механизмом Spring, а с простым 'schema.sql' в каталоге src/main/resources.
create table UserConnection (
userId varchar(255) not null,
providerId varchar(255) not null,
providerUserId varchar(255),
rank int not null,
displayName varchar(255),
profileUrl varchar(512),
imageUrl varchar(512),
accessToken varchar(1024) not null,
secret varchar(255),
refreshToken varchar(255),
expireTime bigint,
primary key (userId, providerId, providerUserId));
create unique index UserConnectionRank on UserConnection(userId, providerId, rank);
create table UserProfile (
userId varchar(255) not null,
email varchar(255),
firstName varchar(255),
lastName varchar(255),
name varchar(255),
username varchar(255),
primary key (userId));
create unique index UserProfilePK on UserProfile(userId);