Welcome back. In this video, we will understand about how to externalize the configurations to a YAML file so that we can migrate between the environments very easily. Let me elaborate. So let's assume that we have two servers. One is production. One is for production.
One is for development. Okay, this is a Dell, Dell mule server development. And this is production server products and this is delta. Now, once I create my project in any point studio, if I do a Maven build, I'll be getting a dot JAR file. And in this current project right now, I'm working on this project externalization externalizing start. If you see the current project, the problem is I have heard coded the values for username and password, and also the host name inside the XML.
So if I create a jar by building this project, the XML will be containing the hard coded values. So, if I have to deploy this jar file in a Dell server, I need to make sure that in my XML, the user name password or hostname, are pointing to a development database. Okay, let's assume that before I deploy to dev database development server, I configure the credentials to connect to a database. But now will I be able to actually deploy the same jar on production because if I deploy the same jar on production, that will also connect to the same demo database. But whenever I deploy my jar to production server, it should connect to a production database without modifying anything in the jar, how to migrate between the environments. If you want to migrate between environments, it is not a good idea to hard code, the credentials inside the XML file.
Yeah, to externalize them, or to configure them, in fact, external files. So what I would do is in my SRC main resources, I will create two files new. I'll save files. I will read the file name by following some conventions. David, as I said, though, dot YAML. Why am l YAML stands for yet another markup language or internal markup language.
So I'll tell you about the structure of Chairman files. Let me create it first. I create a file with named DB dash dev dot html. Here the syntax will be in hierarchical fashion. I want a preface for all my properties called as DB colon and two spaces are de limiters I will write host I'll give you the value localhost. And then under same hierarchy argue, user name, whatever is my username for connecting to database password.
So, like that, what are for instance, I want to externalize I will externalize. Now actually, the property name should be read as DB dot host DB dot username, David password. Okay. Now similarly, what I'll do is I'll create one more YAML file for production, so I'll give the name as DB dash prod dot yamo so like that if you have two environments to create two EML files if you have five environments to create files such YAML files in this case I configured one for Dev and one for production and maybe for production I'll use some production hostname okay just give such name like this to just distinguish between David as their ot Mr and Mrs. Product Yama. Okay, then what are all the changes I need to do in my existing XML in my existing configuration.
I'll double click on a cell component. I will edit the configuration. Here ends up giving hard coding the host I will write dollar curly braces this is a way for you placeholders dollar curly braces DB dot cost. Okay, put Let it be and username. I configured the key as DB dot username password as the control password instead of hard coding I'll give again here. dB dot password and the database name the same only have externalized host username, password.
Okay. But then now I have to tell where it should find placeholders is it. So pretend that I'll have to go to global element and add to configure one global element. I will click on Create. I'll search for property. place holder or here accredits configuration properties.
Here I'll give the file name as DB dash demo dot YAML. So this tag says the configuration properties can be found in the SAML file. If you see the XML which is generated. The tag name is configuration properties and it is pointing to DVS dev dot Yama. Okay, now it looks like I have externalized Now, let me deploy these and see. So how to give a request to localhost 8081 slash DB eight should display all the products.
Let me wait until the server starts. Okay, the server started with your request to Google sheets are it one slash DB sent? Yep, I got the response as expected. So this component cell operation has fired a query Select star from production I got it. So I was able to externalize. So if you see my XML right now, I didn't hard code the values but I have given some placeholders.
Placeholders will follow the syntax dollar and curly braces. But I have actually hard coded DVD as their dot m. And now if I actually create a jar out of this project, the jar will have the hard coded value DVDs there will always pick from DVD as delta dot YAML. So again, I don't want to hardcourt here David as Dell. So what I'll do is when you Again, another placeholder David as dollar. I can say my E and v can be any key. I said my T and V. Now, I should somehow pass this hyphen, this might end value at runtime.
I will pass this as environment variable. So what I can do is while running the application, first of all, let me stop this. Okay. Now while running the application, I will say right click run as mule application Conficker. Actually in the arguments, what I can do is I can pass VM arguments hyphen D, my e n v is a question. So the value for the placeholder I can pass It has an environment variable.
If you know whenever we are running any Java application, if you want to pass any environment variables to Java application, you will pass it as a VM argument with hyphen D option, hyphen D, my end This is a key word or a gift. and the value I give us will apply in the then run. Once a run actually what should happen. This should load DB dash doubt dot YAML file. Let me wait until it starts. Okay, got deployed.
Now let me test it. I'll do a request to slash dB. I should get the same response. Yep. So I was able to externalize a configuration and I was able to tell Val to pick DB as dev or David as prod dynamically based on the environment variable, my end that's fine. I was able to pass the environment variable my envy through studio, how did I pass when I will be running at Sara last run mule application configure and in arguments at a pass.
But what I have to do in case I am deploying in a standalone server. So what I can do is let me go to the standalone server. Here's my standalone server, you know that the main configuration file is rapper.com. In rapid con, actually, there are a lot of arguments which are configured like hyphen D Muriel home, hyphen de Mille bass etc. Up to argument 717. Now if I want to add what I can do is I can add 18th argument, hyphen D, my e Nv is equals to.
So is a question. So, with this if I start with this value, if I start whenever the mule server is starting up, let's say a production server, or dev server on dev server, you might know is equal to Dev and production server or you might be in physical support. So whenever this server is starting up, it knows about the environment variable my envy is a casa del for this. So whenever I'm deploying same jar here, it will load from DVD as download properties. Same jar whenever I'm deploying into production mission. On this production machine configuration, I might have configured my NVC cluster, prod.
So same JAR file if I deploy it on to this one. it'll read from David as product YAML. So I'll be able to easily migrate between the environments if I have externalized my configuration to yamo files. Okay, great. So till now we understood how to externalize and how to migrate between environments easily. You have a lab document.
For this there's a file called as 06 externalization. Right, go through this file and complete first access. I'll see you next video.