{"id":625,"date":"2010-02-27T20:28:25","date_gmt":"2010-02-27T23:28:25","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=625"},"modified":"2010-02-27T20:28:25","modified_gmt":"2010-02-27T23:28:25","slug":"grails-detalhes-pouco-conhecidos-dos-ambientes-de-execucao-environments","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=625","title":{"rendered":"Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments)"},"content":{"rendered":"<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-604\" style=\"margin: 10px;\" title=\"grails_logo\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\" alt=\"\" width=\"163\" height=\"43\" \/><\/a>Um dos recursos mais bacanas do Grails \u00e9 a possibilidade de se possuir mais de um ambiente de execu\u00e7\u00e3o (environment). A grosso modo, pode-se dizer que o environment representa uma configura\u00e7\u00e3o espec\u00edfica de banco de dados usada em determinada situa\u00e7\u00e3o. Neste post n\u00e3o irei explicar como configurar seu acesso \u00e0s suas bases de dados, mas sim alguns pontos pouco divulgados a respeito deste recurso.<\/p>\n<h2>Voc\u00ea pode ter quantos ambientes quiser!<\/h2>\n<p>Por padr\u00e3o Grails nos fornece tr\u00eas ambientes: test, development e production que, respectivamente, s\u00e3o usados quando executamos nossos testes unit\u00e1rios\/de integra\u00e7\u00e3o, estamos programando e, finalmente, enviamos para o servidor de aplica\u00e7\u00f5es no qual o produto final do nosso trabalho ser\u00e1 usado. O que poucos sabem \u00e9 que na realidade podemos ter quantos ambientes de execu\u00e7\u00e3o quisermos!<\/p>\n<p>Para adicionar um novo ambiente de execu\u00e7\u00e3o, basta adicionar mais um bloco de c\u00f3digo dentro da se\u00e7\u00e3o <em>environments<\/em> como no exemplo abaixo:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nenvironments {\r\n\tdevelopment {\r\n\t\tdataSource {\r\n\t\t\tdbCreate = &quot;update&quot; \/\/ one of 'create', 'create-drop','update'\r\n\t\t\turl = &quot;jdbc:mysql:\/\/localhost\/development&quot;\r\n\t\t}\r\n\t}\r\n\ttest {\r\n\t\tdataSource {\r\n\t\t\tdbCreate = &quot;update&quot; \/\/ one of 'create', 'create-drop','update'\r\n\t\t\turl = &quot;jdbc:mysql:\/\/localhost\/test&quot;\r\n\t\t}\r\n\t}\r\n\tproduction {\r\n\t\tdataSource {\r\n\t\t\tdbCreate = &quot;update&quot; \/\/ one of 'create', 'create-drop','update'\r\n\t\t\turl = &quot;jdbc:mysql:\/\/localhost\/production&quot;\r\n\t\t}\r\n\t}\r\n       meu_ambiente {\r\n               dataSource {\r\n                      dbCreate = &quot;update&quot;\r\n                      url = &quot;jdbc:mysql:\/\/localhost\/meu_BD_Louco&quot;\r\n                }\r\n       }\r\n}\r\n<\/pre>\n<p>Para usar estes ambientes de execu\u00e7\u00e3o adicionais na linha de comando, basta usar a sintaxe abaixo:<\/p>\n<p>grails [nome do ambiente] [comando]<br \/>\n<strong>Exemplo:<\/strong><br \/>\ngrails meu_ambiente run-app<\/p>\n<p>Simples assim.<\/p>\n<h2>Descobrir qual o ambiente escolhido em tempo de execu\u00e7\u00e3o<\/h2>\n<p>Grails s\u00f3 permite que um ambiente seja usado por vez. Sendo assim, esta \u00e9 uma informa\u00e7\u00e3o importante que podemos usar a nosso favor quando estamos programando. Suponhamos que seja interessante habilitar comportamentos apenas em alguns ambientes de execu\u00e7\u00e3o. Como voc\u00ea faria? Assim:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nimport grails.util.Environmentswitch(Environment.current) {\r\n\tcase Environment.DEVELOPMENT:\r\n\t  &quot;Apenas para desenvolvimento&quot;\r\n\tbreak\r\n\tcase Environment.PRODUCTION:\r\n\t   &quot;Apenas para prou\u00e7\u00e3o&quot;\r\n\tbreak\r\n        case &quot;meu_environment&quot;\r\n            &quot;Olha o meu environment aqui!&quot;\r\n        break\r\n\r\n}\r\n\r\n<\/pre>\n<h2>Environments na inicializa\u00e7\u00e3o da aplica\u00e7\u00e3o<\/h2>\n<p>No arquivo grails-app\/conf\/Bootstrap.groovy incluimos o c\u00f3digo que desejamos ser executado quando nossa aplica\u00e7\u00e3o \u00e9 inicializada. Como tirar proveito dos ambientes de execu\u00e7\u00e3o nesta situa\u00e7\u00e3o? De novo, como no c\u00f3digo abaixo:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\ndef init = { ServletContext ctx -&gt;\r\n        environments {\r\n            production {\r\n                \/\/ em produ\u00e7\u00e3o\r\n            }\r\n            development {\r\n              \/\/ em desenvolvimento\r\n            }\r\n        }\r\n        ctx.setAttribute(&quot;foo&quot;, &quot;bar&quot;)\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Um dos recursos mais bacanas do Grails \u00e9 a possibilidade de se possuir mais de um ambiente de execu\u00e7\u00e3o (environment). A grosso modo, pode-se dizer que o environment representa uma configura\u00e7\u00e3o espec\u00edfica de banco de dados usada em determinada situa\u00e7\u00e3o. Neste post n\u00e3o irei explicar como configurar seu acesso \u00e0s suas bases de dados, mas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,26,30,5],"tags":[],"class_list":["post-625","post","type-post","status-publish","format-standard","hentry","category-grails","category-grails-brasil","category-grails-guia-rapido-e-indireto","category-groovy"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments) - \/dev\/Kico<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devkico.itexto.com.br\/?p=625\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments) - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Um dos recursos mais bacanas do Grails \u00e9 a possibilidade de se possuir mais de um ambiente de execu\u00e7\u00e3o (environment). A grosso modo, pode-se dizer que o environment representa uma configura\u00e7\u00e3o espec\u00edfica de banco de dados usada em determinada situa\u00e7\u00e3o. Neste post n\u00e3o irei explicar como configurar seu acesso \u00e0s suas bases de dados, mas [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=625\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2010-02-27T23:28:25+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2010\/02\/grails_logo.png\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=625\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=625\",\"name\":\"Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments) - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=625#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=625#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\",\"datePublished\":\"2010-02-27T23:28:25+00:00\",\"dateModified\":\"2010-02-27T23:28:25+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=625#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=625\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=625#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\",\"width\":\"163\",\"height\":\"43\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=625#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments) - \/dev\/Kico","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devkico.itexto.com.br\/?p=625","og_locale":"pt_BR","og_type":"article","og_title":"Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments) - \/dev\/Kico","og_description":"Um dos recursos mais bacanas do Grails \u00e9 a possibilidade de se possuir mais de um ambiente de execu\u00e7\u00e3o (environment). A grosso modo, pode-se dizer que o environment representa uma configura\u00e7\u00e3o espec\u00edfica de banco de dados usada em determinada situa\u00e7\u00e3o. Neste post n\u00e3o irei explicar como configurar seu acesso \u00e0s suas bases de dados, mas [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=625","og_site_name":"\/dev\/Kico","article_published_time":"2010-02-27T23:28:25+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2010\/02\/grails_logo.png"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"2 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=625","url":"https:\/\/devkico.itexto.com.br\/?p=625","name":"Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments) - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=625#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=625#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png","datePublished":"2010-02-27T23:28:25+00:00","dateModified":"2010-02-27T23:28:25+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=625#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=625"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=625#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png","width":"163","height":"43"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=625#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Grails: detalhes pouco conhecidos dos ambientes de execu\u00e7\u00e3o (environments)"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/625"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=625"}],"version-history":[{"count":1,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/625\/revisions"}],"predecessor-version":[{"id":626,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/625\/revisions\/626"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}