spring-boot-autoconfiguration

spring boot autoconfiguration 정리

ConditionalOnMissingBean

@ConditionalOnMissingBean

Bean 이 존재 하지 않을때 실행되는 어노테이션이다.
bean name(String)으로 설정 할 수 도 있고 class(해보지 않음) 혹은 annotation(이것도 안해봄)등 설정 할 수 있는 모양이다.

예) @ConditionalOnMissingBean(name = "helloConfigSample")
helloConfigSample 존재 하지 않을때 실행하라.

ConditionalOnBean

@ConditionalOnBean

이 전과 반대로 Bean이 존재 할때 실행 되는 어노테이션이다.

예) @ConditionalOnBean(name = "helloConfig")
helloConfig 존재 할때 실행하라.

ConditionalOnProperty

@ConditionalOnProperty

속성중 prefix라는 속성이 있는데 이 속성의 해당되는 프로퍼티 값이 있다면 실행된다.

예) @ConditionalOnProperty(prefix = "autoconfig.sample", name = "id")

EnableConfigurationProperties

@EnableConfigurationProperties

ConditionalOnProperty 같이 사용하는 어노테이션이다. 프로퍼티의(예를 들어) autoconfig.sample.id 가 있다면 id 값을 저장 해놓기 위한 class가 필요 하다. 그용도로 사용한다.
EnableConfigurationProperties 만 있어도 사용은 가능하지만 프로퍼티의 autoconfig.sample.id 설정하지 않았다면 null 로 나온다. 만약 사용한다면 위의 어노테이션이랑 사용하길 권장한다.

예) @EnableConfigurationProperties(SampleProperties.class)

ConditionalOnWebApplication

@ConditionalOnWebApplication

웹인지 아닌지 판단 하는 어노테이션이다. web 일경우 실행된다. 별거 없다.

예) @ConditionalOnWebApplication

ConditionalOnNotWebApplication

@ConditionalOnNotWebApplication

위와 반대로 web이 아닐경우 실행된다.

예) @ConditionalOnNotWebApplication

ConditionalOnJava

@ConditionalOnJava

자바 버전을 설정 하는 어노테이션이다.
현재 버전(자신의 버전)설정한 버전 보다 낮으면 실행된다.
예를 들어 자신의 버전이 1.8 이고 설정한 버전이 1.8 버전보다 작거나 같다면 실행되고 높으면 실행 되지 않는다.

예) @ConditionalOnJava(value = ConditionalOnJava.JavaVersion.SIX)

ConditionalOnResource

@ConditionalOnResource

리소스 경로에 파일이 있으면 실행되는 어노테이션이다. 특정 경로를 지정해주면 된다.

예) @ConditionalOnResource(resources = "classpath:/META-INF/resourcesfile")

ConditionalOnClass

@ConditionalOnClass

처음에 bean과 동일하게 class를 지정 해주면 된다.(해보진 않았다. 동일하다고 예상된다. jar로 묶어야 되는데 귀찮)
name으로 지정시에는 풀 패키지명을 써줘야 된다.

예) @ConditionalOnClass(name = "com.example.annotation.HelloConfig") 이것만 해봐서 예로 달아놨다.

ConditionalOnMissingClass

@ConditionalOnMissingClass

위의 어노테이션이랑 반대되는 어노테이션이다. 이것도 해보지않았다. name 으로만 해보았다.

예) @ConditionalOnMissingClass(name = "com.example.annotation.HelloConfigMissing")

ConditionalOnExpression

@ConditionalOnExpression

표현식으로 나타낼수 있는 어노테이션이다.

예) @ConditionalOnExpression(value = "'${spring.application.name}' == 'spring-autoconfig'")

위의 어노테션 말고도 몇가지가 더 있는데 자주 쓸만한건 없는거 같다.

shell 간단정리

shell-script

변수

변수 선언

  • 타입 추론을 한다.
val=10
echo $val     
#10
str="hello world"
echo $str     
#hello world
arr=("value1 value2 value3")
echo $arr     
#value1 value2 value3
  • 스크립트 인자 전달
    • ./example01.sh Hello world
echo "this file : $0"       #this file : ./example01.sh
echo "argument size : $#"   #argument size : 2
echo "Process ID : $$"      #Process ID : 10062
echo "arguments : $*"       #arguments : Hello world
echo "argument 1 : $1"      #argument 1 : Hello
echo "argument 2 : $2"      #argument 2 : world

if

문자열 비교

  • 문자는 = 로 비교를 한다
if [[  $str = "str" ]]; then
  echo "str equels str"
fi
#str equels str
  • 문자가 같지 않을때
if [[ $str != $str1 ]]; then
  echo "str diff str1"
fi
#str diff str1
  • 빈 문자가 아닌때
if [[ -n $str ]]; then
  echo "is not null"
fi
#is not null
  • 빈 문자열 일때
if [[ -z $str2 ]]; then
  echo "is null"
fi
#is null

숫자 비교

  • 같은 숫자인지 비교
if [[ i -eq 1 ]]; then
  echo "i=1"
fi
#i=1
  • 다른 숫자인지 비교
if [[ i -ne 2 ]]; then
  echo "i!=1"
fi
#i!=1
  • i > j 라면 참
if [[ 2 -gt i ]]; then
  echo "2 > i"
fi
#2 > i
  • i >= j 라면 참
if [[ 1 -ge i ]]; then
  echo "1 >= i"
fi
#1 >= i

if [[ 2 -ge i ]]; then
  echo "2 >= i"
fi
#2 >= i
  • i < j 라면 참
if [[ i -lt 2 ]]; then
  echo "i < 2"
fi
#i < 2
  • i <= j 라면 참
if [[ i -le 2 ]]; then
  echo "i <= 2"
fi
#i <= 2

if [[ i -le 1 ]]; then
  echo "i <= 1"
fi
#i <= 1

파일

  • -e 해당 파일이 존재 하면 참(폴더도 가능?)
  • -f 해당 파일이 존재 하면 참
  • -d 해당 디렉토리 존재 하면참
if [[ -e example01.sh ]]; then
  echo "found example01.sh"
fi
#found example01.sh

if [[ -f example01.sh ]]; then
  echo "found example01.sh"
fi
#found example01.sh

if [[ -d example02 ]]; then
  echo "found example02 dir"
fi
#found example02 dir

if elif else

if [[ -f example02 ]]; then
  echo "example01 dir?"
elif [[ -d example02 ]]; then
  echo "example02 dir"
else
  echo "not found example02"
fi
#example02 dir

and or

if [[ -d example02 && -f example02.sh ]]; then
  echo "example02 dir and example02.sh file"
fi
#example02 dir and example02.sh file

if [[ -f example02 || -f example02.sh ]]; then
  echo "example02 file or example02.sh file"
fi
#example02 file or example02.sh file

for , while

arr=("value1 value2 value3 value4 value5")
  • forin
for value in ${arr}; do
  echo "$value"
done
#value1
#value2
#value3
#value4
#value5

for file in $(ls -a | grep example)
do
    echo "$file"
done
#example01.sh
#example02
#example02.sh
#example03.sh
#example04.sh
  • while
i=0
while [ $i -lt 5 ]
do
  echo $i
 #((i++))
 let "i++"
done
#0
#1
#2
#3
#4
  • password example
i=0
echo "Enter Password : "
read password1

echo "Retype Password : "
read password2

while [[ $password1 != $password2 && $i -lt 2 ]]; do
  echo "Password mismatch Try again"
  echo "Retype Password : "
  read password2
  ((i++))
done
if [[ $password1 != $password2 ]]; then
  echo "Retry password"
else
  echo "OK password"
fi

#Enter Password : 
#hello123
#Retype Password : 
#hello12
#Password mismatch Try again
#Retype Password : 
#hello123
#OK password

function

  • function 이란 키워드를 안써도 되긴하다. 하지만 가독성이 떨어지므로 쓰기로하겠다.
  • 함수 호출. 간단하다.
function func(){
  echo "i am function"
}
func
#i am function
  • 파라미터 전달
function funcParam(){
  echo "param Count : $#"
  echo "param #1 : $1"
  echo "param #2 : $2"
}
#param Count : 2
#param #1 : Hello
#param #2 : world
funcParam Hello world
  • return string
function funcReturnStr(){
  val="i love programming"
  echo "$val"
}
retval=$(funcReturnStr)
echo $retval            #여기에서 출력이 된다. 여기를 지우면 출력되지 않는다.
#i love programming
  • return number
function funcReturnInt(){
  val=5
  return $val
}
funcReturnInt
ret=$?
echo $ret
#5
  • return array (string 동일한 방식)
function funcReturnArr(){
  arr=(1 2 3 4 5)
  # echo ${arr[@]}
  echo ${arr[*]}
}

retArr=$(funcReturnArr)
echo $retArr
#1 2 3 4 5