Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Spring Boot - Database Initialization

Estou tentando criar uma forma que ao iniciar o sistema ele popule uma tabela e persista no sqlserver, mas tenho que garantir que se o sistema inicia novamente não realize outro insert.

Verifique que é possível usando um arquivo com nome data.sql https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.data-initialization

mas quando eu uso if no código sql retornar

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement “IF[*] (NOT EXISTS(SELECT * FROM USUARIO U WHERE U.NOME=‘Moderador’))”; SQL statement: IF (not exists(select * from USUARIO u where u.nome=‘Moderador’))

o sql eu testei direto no BD e funcionou.

IF (not exists(select * from USUARIO u where u.nome=‘Admin’)) begin INSERT INTO USUARIO(nome, login , senha) VALUES(‘Admin’, ‘admin’, ‘senhahash’); end

3 respostas
solução!

é pq essa query ela roda como uma stored procedure, eu acredito que nao va funcionar usando o arquivo padrão do spring. O que você pode fazer é caso no primeiro login o sistema não encontre um usuário na tabela, você devolve esse seu usuário padrão.

Service
public class AppUserDetailsService implements UserDetailsService {

    @Autowired
    private UsuarioRepository usuarioRepository;

    @Override
    public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
        if (usuarioRepository.count() != 0L) {            
            Usuario usuario = usuarioRepository.findByLogin(login)
                    .orElseThrow(() -> new UsernameNotFoundException("Usuário e/ou senha incorretos"));
            return new UsuarioSistema(usuario, new HashSet<>());
        }

        return new UsuarioSistema(getUsuarioPadrao(), new HashSet<>());
    }

    private Usuario getUsuarioPadrao() {
        Usuario usuario = new Usuario();
        usuario.setNome("Admin");
        usuario.setLogin("Admin");
        usuario.setSenha("$2y$12$doMWeyJlQOc3tJhuOQuNeOPgt4g4twJZbNKKxFpJNuNoRT4qw2Kee");
        return usuario;
    }

}

obrigado Thiago

obrigado Thiago