Java

[Java] 여러가지 config

펭귄코기 2023. 6. 6. 23:23

main

package com.example.demo;

	import java.io.IOException;

	import javax.xml.parsers.ParserConfigurationException;

	import org.springframework.boot.autoconfigure.SpringBootApplication;
	import org.xml.sax.SAXException;

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException {

		/**
		 * 1. 코드에서 직접 설정하기 (java 코드에서)
		 * 	System.setProperty('db.url', 'jdbc:mysql://localhost:3306/mydb');
		 *
		 * 2. 프로그램 실행 시 JVM 옵션으로 설정하기 (bash 창에서)
		 * 	java -Ddb.url=jdbc:mysql://localhost:3306/mydb MainClass
		 */

		/**
		 * 환경변수
		 */

		String dburl = System.getenv("db.url"); // 환경변수를 가져옴
		System.out.println("db.url = " + dburl);


		/**
		 * Properties
		 */

		String dburl = System.getProperty("db.url"); // property 값을 가져옴
		System.out.println("db.url = " + dburl);


		/**
		 * properties file 방법
		 */

		Properties props = new Properties();

		File propFile = new File("./src/main/resources/application.properties");

		props.load(new FileReader(propFile));  // properties 로딩

		String dburl = props.getProperty("db.url"); // db.url property 가져옴
		System.out.println("db.url = " + dburl);


		/**
		 * SAX(Simple API for XML) Parser
		 */

		SAXParserFactory configFactory = SAXParserFactory.newInstance();
		SAXParser configParser = configFactory.newSAXParser();
		TestXmlHandler configHandler = new TestXmlHandler();

		configParser.parse(new File("./src/main/resources/test.xml"), configHandler);

		Config config = configHandler.getConfig();
		System.out.println("id = " + config.getId());
		System.out.println("db.url = " + config.getDburl());


		/**
		 * DOM(Document Object Model) Parser
		 */

		DocumentBuilderFactory configFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder configBuilder = configFactory.newDocumentBuilder();
		Document doc = configBuilder.parse(new File("./src/main/resources/test.xml"));

		NodeList dburlList = doc.getElementsByTagName("db.url"); // db.url인 tag노드목록을 찾음
		for (int index = 0; index < dburlList.getLength(); index++) {

			Node node = dburlList.item(index);
			if (node.getNodeType() != Node.ELEMENT_NODE) {
				continue;
			}

			Element dburlElement = (Element)node;
			System.out.println("id = " + dburlElement.getAttribute("id")); // node의 Id 정보를 가져옴
			System.out.println("db.url = " + dburlElement.getTextContent()); // node의 text를 가져옴
		}


		/**
		 * YAML
		 */

		Map<String, Object> yaml = new Yaml().load(new FileReader("./src/main/resources/test.yaml"));

		ArrayList<?> config = (ArrayList<?>)yaml.get("config");
		String id = ((Map<String, String>)config.get(0)).get("id");
		String dburl = ((Map<String, String>)config.get(1)).get("db.url");

		System.out.println("id = " + id);
		System.out.println("db.url = " + dburl);

		SpringApplication.run(DemoApplication.class, args);
	}
}

/**
 * SAX Parser 할때
 */

class TestXmlHandler extends DefaultHandler {
	@Getter
	@Setter
	private Config config;

	private int state = 0;
	private StringBuffer dburl;

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

		if (qName == "config") {

			this.setConfig(new Config());

		} else if (qName == "db.url") {

			this.getConfig().setId(attributes.getValue("id")); // 속성값을 가져와 설정
			this.state = 1;    // 현재 db.url tag 내부로 설정
			this.dburl = new StringBuffer(""); // db.url의 text를 담을 임시공간
		}

	}

	@Override
	public void endElement(String uri, String localName, String qName) {

		if (qName == "db.url") {
			this.state = 0;    // 현재 db.url tag 내부가 아님으로 설정
			this.getConfig().setDburl(this.dburl.toString().trim());
		}

	}

	@Override
	public void characters(char ch[], int start, int length) {

		if (this.state == 1 && this.dburl != null) {
			this.dburl.append(ch, start, length);
		}
	}
}

@Data
class Config {
	private String id;
	private String dburl;
}

 

application.properties

db.driver=oracle.jdbc.OracleDriver
db.url=jdbc:oracle:thin:@127.0.0.1:1521:xe
db.user=
db.pass=

 

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <db.url id="localhost">127.0.0.1:1521
    </db.url>
</config>

 

test.yaml

config:
  - id: localhost
  - db.url: 127.0.0.1:1521
댓글수0