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