Spring Boot 无法自动创建数据库(使用 Jdbc + Mysql)



我尝试在MySQL中自动创建和初始化一个名为"spring"来存储用户和权限,所以我创建了文件模式。SQL和数据。SQL中的"资源"文件夹(请参阅下面的脚本)。当我运行程序时,它抛出一个异常,声明"数据源";无法将Bean实例化为"spring"我试图创建的数据库没有找到!!

p程序工作正常,当我切换到内存中的数据库H2,但是当我切换到MySQL如上所述,问题失败。

在我看来,spring boot正在尝试创建"数据源"。

如果是MySQL,请在执行SQL脚本前执行SQL脚本。

谁能给我解释一下到底发生了什么事?

下面是涉及数据源bean的程序:

package com.javamaster.springsecurityjdbc.security;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.JdbcUserDetailsManager;
import javax.sql.DataSource;
@Configuration
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService(DataSource dataSource){
return new JdbcUserDetailsManager(dataSource);
}
@Bean
public PasswordEncoder passwordEncoder(){
return NoOpPasswordEncoder.getInstance();
}
}

schema.sql

create database spring;
CREATE TABLE IF NOT EXISTS `spring`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL,
`enabled` INT NOT NULL,
PRIMARY KEY (`id`));
CREATE TABLE IF NOT EXISTS `spring`.`authorities` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(45) NOT NULL,
`authority` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`));

data.sql

INSERT IGNORE INTO `spring`.`authorities` VALUES (NULL, 'tom', 'write');
INSERT IGNORE INTO `spring`.`users` VALUES (NULL, 'tom', '123456', '1');

application.properties

spring.datasource.url=jdbc:mysql://localhost/spring?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.initialization-mode=always

你最可能得到的是:

Failed to obtain JDBC Connection; nested exception is java.sql.SQLSyntaxErrorException: Unknown database 'spring'

Failed to execute SQL script statement #1 of URL: create database spring; nested exception is java.sql.SQLException: Can't create database 'spring'; database exists

您需要在脚本之外手动创建数据库:

schema.sql

-- create database spring; <-- remove this line
CREATE TABLE IF NOT EXISTS `spring`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL,
`enabled` INT NOT NULL,
PRIMARY KEY (`id`));
CREATE TABLE IF NOT EXISTS `spring`.`authorities` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(45) NOT NULL,
`authority` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`));

根据上述异常,在第一种情况下,Spring在运行任何脚本之前试图连接到数据库,因此找不到它并失败。在第二个场景中,它能够连接,但是数据库已经创建,因此脚本失败。

我在本地测试了这些,并且能够成功运行应用程序,一旦删除了create database部分。这两个表都被正确创建和填充。

相关内容

  • 没有找到相关文章

最新更新