在Spring Boot中默认创建管理员帐户

时间:2018-09-17 14:50:52

标签: spring spring-mvc spring-boot

我有一个用户实体:

User.java

@Entity
public class user {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
@NotBlank
private String firstname;
...

当我第一次部署应用程序时,它将在数据库中创建此表。

我的问题:创建表时,有什么方法可以创建具有名字user的管理员用户?

2 个答案:

答案 0 :(得分:2)

我总是希望避免使用sql脚本,因此我使用CommandLineRunner接口。 这是一个使用spring数据的示例,它不是工作代码:

@Component    
public class CommandLineAppStartupRunner implements CommandLineRunner {
    @Autowired
    UserRepository userRepository;

    @Override
    public void run(String...args) throws Exception {
        User admin = new user(firstName);
        userRepository.save(admin);
    }
}

在应用启动之前,该类将被执行。

答案 1 :(得分:1)

您可以在src/main/resources/data.sql中放入以下内容:

INSERT INTO users (firstname, password, enabled)
SELECT 'admin', 'secret', TRUE
WHERE NOT EXISTS (SELECT * FROM users WHERE firstname='admin');

假设您将PostgreSQL用于数据库后端。

由于我不知道您使用的数据库架构是什么,因此您必须修改此查询以匹配您的架构,但是它应该为您提供基本概念。

我认为您甚至不需要为此添加任何配置,因为Spring会自动将其拾取并用于数据库初始化(如果它位于正确的目录中)。

根据another answer to a similar question,在Spring Boot 2.x中,您必须添加以下配置才能使其工作:

spring.datasource.initialization-mode=always