Selecionar DB na primeira utilização + Usuário e Senha
04/01/2017 10:56
0
Boa tarde, pessoal.

Gostaria de saber se é possível (acho que sim) e principalmente "como" eu poderia deixar a configuração do acesso ao banco de dados para o usuário criar na primeira vez que estiver rodando a aplicação. Estou usando mysql.

Isso acontece por exemplo com e-Commerces e outras aplicações web (na maioria em php) e durante a primeira execução pede para o usuário informar qual a {URL, porta, nome do banco, usuário, senha} e depois disso o sistema termina de se auto-configurar. 

Eu não tenho certeza se isso funcionaria bem com groovy porque talvez teria que reiniciar o container (diferente do php que simplesmente salvar o arquivo .php já reflete em alterações).

Se isso não for muito aplicável para aplicações Grails, o que vocês fazem para evitar ter que colocar os parâmetros de acesso ao banco dentro do application.yml (ou datasources.groovy) e permitir que o cliente possa eventualmente alterar a conexão sem ter que gerar um novo War da aplicação. 

Obrigado
Tags: Grails, Datasource, Database, mysql, string, conexão


0
Coloca-se no application.yml mesmo, porém externo ao war/jar.

Está utilizando Grails 2.x ou 3.x?


0
Eu estou usando o Grails 3.2.
Como eu faria para deixar o application.yml fora do war?
04/01/2017 13:55


1
Confesso que para Grails 3 acho isso meio enjoadinho, talvez eu não tenha pego direito a ideia.
Tem algumas localizações que o Spring Boot (o cara em cima do qual o Grails é construído) procura automaticamente. Se você estiver rodando a aplicação como um jar standalone, creio que pode colocar na mesma pasta do jar e ele já vai ler.

O que eu implementei para mim, baseado em alguns exemplos que vi, foi isso:
1. Faça a sua classe Application implementar EnvironmentAware
2. Implemente o método setEnvironment assim:
void setEnvironment(Environment environment) {
String configPath = System.getenv("XPTO_CONFIG_LOCATION")
if (!configPath) {
log.info("Arquivo de configuração externa não especificado")
return
}
log.info("Carregando configuraçao externa de ${configPath}")
Resource resourceConfig = new FileSystemResource(configPath)
if (!resourceConfig.exists()) {
log.error("Arquivo de configuração externa não existe!")
return
}
YamlMapFactoryBean ymfb = new YamlMapFactoryBean()
ymfb.setResources([resourceConfig] as Resource[])
ymfb.afterPropertiesSet()
Properties properties = ymfb.getObject()
environment.propertySources.addFirst(new PropertiesPropertySource("m10.config.location", properties))
}
?
Assim basta criar no sistema operacional uma variável de ambiente chamada XPTO_CONFIG_LOCATION cujo valor corresponda ao caminho completo do arquivo que vc quer carregar


1
Esse código é baseado em alguns exemplos que vi por aí, a principal diferença é o uso da classe YamlMapFactoryBean ao invés de YamlPropertiesFactoryBean, isso tem impacto na forma como listas são tratadas, ficando coerente com a forma como o próprio Grails lê e interpreta o application.yml do projeto.

Mais informações sobre configurações externalizadas, pesquise sobre spring boot external config


0
Muito obrigado, Magno!
Vou tentar implementar da mesma forma que você fez. Usar a variavel do sistema pra guardar o caminho do arquivo de configuração é uma ótima ideia!
04/01/2017 16:42



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto