-
Notifications
You must be signed in to change notification settings - Fork 329
10 Environment
Em seu web.xml
, adicione:
<context-param>
<param-name>br.com.caelum.vraptor.environment</param-name>
<param-value>nome_do_ambiente</param-value>
</context-param>
onde nome_do_ambiente
é o ambiente atual (PRODUCTION
ou DEVELOPMENT
, por exemplo).
Ou se preferir, você também pode criar uma variável global do sistema chamada VRAPTOR_ENVIRONMENT
.
Seu nome_do_ambiente.properties deve ser criado em src/main/resources
. Exemplo (development.properties):
ambiente_de_teste = true
email_de_teste = [email protected]
environment.controller = true
import br.com.caelum.vraptor.environment.Environment;
@Controller
public class myController {
private final Environment environment;
private final MailSender sender;
/**
* @deprecated CDI eyes olny
*/
public myController() {
this(null, null);
}
@Inject
public myController(Environment environment, MailSender sender) {
this.environment = environment;
this.sender = sender;
}
public void sendMail(String email) {
if(environment.isDevelopment()) {
sender.sendMailTo(environment.get("dev_mail"));
return;
}
sender.sendMailTo(email);
}
}
<c:if test="${environment.isTest()}">
<p>
Você está no ambiente de teste. Suas ações aqui não afetarão o sistema.
</p>
</c:if>
Enviando e-mail para: ${env.get('email_de_teste')}
Se você precisa acessar um arquivo de configuração diferente para suas bibliotecas,
de acordo com seu ambiente, você também pode utilizar o Environemnt.
Basta colocar, por exemplo, seu hibernate.cfg.xml
em diretórios com o nome
de seus ambientes: development e production (por exemplo).
Environment.getResource(...)
retornará o resource de acordo com seu ambiente atual:
cfg = new AnnotationConfiguration();
cfg.configure(environment.getResource("/hibernate.cfg.xml"));
Para manter compatibilidade com quem não utilizava o environment, caso o arquivo não seja encontrado no diretório com o nome do ambiente, ele será carregado no diretório root (do classpath).
Você também consegue injetar suas configurações programaticamente usando o @Property
, por exemplo:
import br.com.caelum.vraptor.environment.Environment;
@Controller
public class myController {
@Inject @Property("email") private String email;
public void sendMail(String email) {
sender.sendMailTo(email);
}
}
Neste caso, se o seu environment estiver com valor "DEVELOPMENT", vai injetar o valor que corresponde a chave email do arquivo development.properties
, se estiver com "PRODUCTION" do production.properties
e assim por diante. Dessa forma você não precisa dos ifs como: if(environment.isDevelopment()) {...}
em seu código.
Outra facilidade, é que se o nome da chave for o mesmo nome do field injetado, como em nosso caso com a chave email, você pode deixar apenas o @Property
que o nome será inferido. Seu controller ficaria assim:
import br.com.caelum.vraptor.environment.Environment;
@Controller
public class myController {
@Inject @Property private String email;
public void sendMail(String email) {
sender.sendMailTo(email);
}
}