Notes about Java 🌴
197 subscribers
41 photos
1 video
3 files
76 links
vk.com/notes_about_java
Научим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с нуля!
1. Π’ΠΈΠ΄Π΅ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π² ΠΊΠΎΠ΄Π΅
2. ΠšΡ€Π°Ρ‚ΠΊΠΈΠ΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
3. ΠžΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΡƒΡ€ΠΎΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½ΠΎΠΌ
4. ΠŸΠΎΠ½ΡΡ‚Π½Ρ‹Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ
5. МоТно ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ занятий
@max_urusoff
Download Telegram
#Component #Repository #Service #Spring
ΠšΠ°ΠΊΡƒΡŽ Spring Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π΄ классом, @Component ΠΈΠ»ΠΈ @Repository? А ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ @Service?

Π‘Ρ‚Π°Ρ‚ΡŒΡ для понимания Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π½Π° Ρ‚Π΅ΠΌΡƒ:
https://coderlessons.com/articles/java/raznitsa-mezhdu-component-service-controller-i-repository-v-spring

Π’ контСкстС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ· ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π° аннотация @Repository ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Spring Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это класс пСрсистСнтного слоя.
А для Π±ΠΎΠ»Π΅Π΅ ясной Π»ΠΎΠ³ΠΈΠΊΠΈ прилоТСния - слуТит основой для хранСния ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
Богласны с Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ?
#Maven #DependencyScope #Scope #pom #dependencyManagement
#provided

ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎ Maven.
Π§Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия зависимости "Dependency scope"?
И ΠΊΠ°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅?
<scope>?</scope>

ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия scope опрСдСляСт этап ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эта Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ссылкС:
https://java-online.ru/maven-dependency.xhtml#scope
#AtomicReference #ThreadSafe
ΠŸΡ€ΠΈΠ²Π΅Ρ‚.
А ΠΊΠ°ΠΊ Π²Ρ‹ опрСдСляСтС "Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ" Π² Java?
ΠœΠΎΠΆΠ΅Ρ‚ это Ρ‚ΠΎΠΆΠ΅ самоС Ρ‡Ρ‚ΠΎ ΠΈ синхронизация?

На ΠΌΠΎΠΉ взгляд Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ "нСдСлимости" ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.
Π’ΠΎ Π΅ΡΡ‚ΡŒ дСйствиС Π»ΠΈΠ±ΠΎ выполняСтся Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ (ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ - это ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚) Π»ΠΈΠ±ΠΎ дСйствиС ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ расколбасило Π² Π΅Π³ΠΎ состоянии.

Бсылка Π½Π° бСсСду ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅:
https://ru.stackoverflow.com/questions/616278/%D0%90%D1%82%D0%BE%D0%BC%D0%B0%D1%80%D0%BD%D1%8B%D0%B5-%D0%B8-%D0%BD%D0%B5%D0%B0%D1%82%D0%BE%D0%BC%D0%B0%D1%80%D0%BD%D1%8B%D0%B5-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8-java
#StreamAPI #Map #groupingBy #mapping
Java Stream API Ρ€ΡƒΠ»ΠΈΡ‚.

Волько Ρ‡Ρ‚ΠΎ воспользовался ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΠ» для сСбя удобство стримов.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ - Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° списка Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎ ΠΈΡ… долТности, ΠΏΡ€ΠΈ этом нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π°:

Map<String, Set<String>> map4 = workers.stream().collect(

Collectors.groupingBy(Worker::getPosition,

Collectors.mapping(Worker::getName,Collectors.toSet())));


https://habr.com/ru/post/348536/
πŸ‘2
#mockbean #spybean #springboottest #ioc
Π”Π΅Π»Π°Π» я Ρ‚ΡƒΡ‚ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ тСстов ΠΏΡ€ΠΈ бСгствС ΠΎΡ‚ ΠΌΠΎΠ΄Π½ΠΎΠ³ΠΎ SpringBoot Π² Ρ…ΡƒΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ spring-context...

И понял Ρ‡Ρ‚ΠΎ оказываСтся Π² SpringBoot Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ интСрСсныС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ JUnit тСстов ΠΊΠ°ΠΊ @SpyBean ΠΈ @MockBean, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со Spring IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ зависимости Π² контСкстС тСстовых классов.

Π”Π°Π΄ΠΈΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠ΅ опрСдСлСния:
- @MockBean - ΠΌΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ (Mockito Mock) Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ спринга.
- @SpyBean - Π΄Π΅Π»Π°Π΅Ρ‚ шпиона (Mockito Spy) ΠΈΠ· спринг Π±ΠΈΠ½Π°.

SpringBoot ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠΈΡ€Π½Ρ‹ΠΉ, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ приятныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ эти Π΄Π²Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ΄ΡƒΡ‚ Π² составС.

Для ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ:
https://java-ru-blog.blogspot.com/2020/04/spring-boot-testing-mock-spy.html
πŸ€”1
#superBuilder #builder #lombok

Как извСстно аннотация Lombok @Builder ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ, особСнно ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ мноТСства ΠΏΠΎΠ»Π΅ΠΉ Π² классС.

А ΠΊΠ°ΠΊ насчСт Π±ΠΈΠ»Π΄Π΅Ρ€Π° для абстрактного класса ΠΈ наслСдников?
Для этого Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ интСрСсноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - аннотация @SuperBuilder!

ΠžΠ±Ρ‰Π°Ρ схСма примСнСния Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π²ΠΊΡƒΠΏΠ΅ с наслСдниками:
@SuperBuilder
public abstract class Parent {
// Π½Π°Ρ‡ΠΈΠ½ΠΊΠ°...
}


@SuperBuilder
public class Son extends Parent {
// вкусная Π½Π°Ρ‡ΠΈΠ½ΠΊΠ°...
}

@SuperBuilder
public class GrandSon extends Son {

// Π½Π°Ρ‡ΠΈΠ½ΠΊΠ° Π΅Ρ‰Π΅ вкуснСй...
}

Π’Π°ΠΆΠ½ΠΎ - @SuperBuilder нСльзя ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ с @Builder Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ссылкС:
https://javascopes.com/lombok-builder-inheritance-bce31ecd/
πŸ‘1
#builder #lombok

Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ builder ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Ссли аннотация Π²Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° конструктор Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса ΠΈ Π½Π° конструктор наслСдника?

На ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° - компилятор ругаСтся Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ builder ΠΏΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ.

РСшСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ своС имя Π±ΠΈΠ»Π΄Π΅Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для наслСдника:
@Builder(builderMethodName = "sunnyBuilder")

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ссылкС Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ "2.3. БосущСствованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Builders".
https://javascopes.com/lombok-builder-inheritance-bce31ecd/
πŸ‘1
#mutable #immutable #cuncurrency

https://youtu.be/f8nEQ5zDsOQ

На ΠΌΠΎΠΉ взгляд настоящСС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π° особСнно Π² контСкстС ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡ΠΊΠΈ - это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ°.

Π’ этом Π²ΠΈΠ΄Π΅ΠΎ Π°Π²Ρ‚ΠΎΡ€ ΠΊΡ€Π°Ρ‚ΠΊΠΎ раскрываСт вопрос ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ - это Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ!
πŸ€”1
#threadlocal

Бтолкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ - Π·Π°Π²Π΅Π» ThreadLocal ΠΏΠΎΠ»Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» .set(), Π° это ΠΏΠΎΠ»Π΅ Ρ…ΠΎΡ‚ΡŒ Ρ‚Ρ‹ трСсни, ΠΏΡ€ΠΈ запуска сСрвиса Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ - null ΠΈ всС!

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ThreadLocal ΠΏΠΎΠ»Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Π·ΠΎΠ½Ρ‹ ΠΊΠΎΠ΄Π° - Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· .set() Π²Π½ΡƒΡ‚Ρ€ΠΈ этой ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π·ΠΎΠ½Ρ‹ ΠΊΠΎΠ΄Π° (Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ThreadPool, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ состояниС).

А ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎ попадания Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ Π·ΠΎΠ½Ρƒ Π΄Π΅Π»Π°Π» .set() - ThreadLocal полю Π½Π° это "Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²ΠΎ", ΠΎΠ½ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ "null" (ΠΏΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ создании класса), Ρ‚Π°ΠΊ "null" ΠΈ зашло Π² Π·ΠΎΠ½Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ThreadPool.

Π₯ΠΎΡ‚ΡŒ 100 Ρ€Π°Π· Π΄Π΅Π»Π°ΠΉ .set() Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° - ThreadLocal ΠΏΠΎΠ»Π΅ окаТСтся Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Π·ΠΎΠ½Π΅ Π² Ρ‚Π°ΠΊΠΎΠΌ состоянии, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ создано.

ΠœΠΎΡ€Π°Π»ΡŒ басни Ρ‚Π°ΠΊΠΎΠ²Π° - Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ThreadLocal для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ:
1) ΠŸΡ€ΠΈ создании экзСмпляра класса.
2) Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ .set() Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Π·ΠΎΠ½Ρ‹.

ΠšΠ»Π°ΡΡΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ "thread-safety":
https://javascopes.com/java-thread-safety-11db95ab/
πŸ”₯4πŸ‘1
#atomicreference

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΠ³Π΄Π° пишСшь Stream Ρ‚ΠΎ IDEA ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΡŽ Π² AtomicReference?
Π’ΠΎΠΎΠ±Ρ‰Π΅ для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ этот Ρ‚ΠΈΠΏ ΠΏΠΎΠ»Π΅ΠΉ?

Атомики - это классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ измСнСния своСго значСния Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ, Ρ‚.ΠΎ. ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ lock-free thread-safe использованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ДостигаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° compare-and-swap (CAS) ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ. На ΡƒΡ€ΠΎΠ²Π½Π΅ инструкций Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° процСссоров имССтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° CAS.

НапримСр, Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ addMissedColToDf ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡ΠΊΠ΅ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ сильно захотят Π·Π°ΠΉΡ‚ΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ resultDf ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ ΠΊ Π½Π°Π±ΠΎΡ€Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΎΠ½Π° (resultDf) даст ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Ρ€Π°Π·Π±ΠΈΡ‚ΠΎΠ³ΠΎ состояния ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ!

Π’ΠΎ Π΅ΡΡ‚ΡŒ опСрация Π»ΠΈΠ±ΠΎ выполняСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π»ΠΈΠ±ΠΎ это ΠΏΠΎΠ»Π΅ посылаСт java дСйствиС лСсом ΠΈ Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

КлассноС описаниС Π°Ρ‚ΠΎΠΌΠΈΠΊΠΎΠ²:
https://github.com/jmorozov/awesome-java-backend-interview-rus/blob/main/java/concurrency.md#ΠΊΠ°ΠΊ-Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚-Π°Ρ‚ΠΎΠΌΠΈΠΊΠΈ
πŸ‘2
#idea #replace #refact

БСгодня Π΄Π΅Π»Π°Π» ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Π½ Π² ΠΊΠΎΠ΄Π΅ Π²Π²ΠΈΠ΄Ρƒ раздСлСния классов модуля Π½Π° нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΠΎ логичСскому Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Ρƒ.

Π‘Ρ‚ΠΈΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°, ΠΊΠΎΠ³Π΄Π° ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΡ€Π°ΡΠ½Π΅ΡŽΡ‚, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ собираСтся...

И Ρ‚ΡƒΡ‚ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ IDEA!

ГорячСС сочСтаниС клавиш "Ctrl+Shift+R" ΠΈ мСню Π·Π°ΠΌΠ΅Π½Ρ‹ спасаСт это покраснСниС.
ОсобСнно ΠΌΠ½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ опция Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π° Π±Π°Π·Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·ΠΎΠ½Ρ‹. Для этого Π² "Scope" Π½Π°Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ "Selection".

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π·Π°ΠΌΠ΅Π½Π΅ Π΅ΡΡ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π° сайтС JetBrains: https://www.jetbrains.com/help/idea/finding-and-replacing-text-in-project.html#replace_search_string_in_project
πŸ‘3
#forkjoinpool

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Π³Π΄Π΅ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ, этот Π²ΠΈΠ΄ threadpool ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡ€Ρ†ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

Надо ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ справляСтся со своСй Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π‘Ρ‹Π»ΠΈ сдСланы сравнСния с классичСским fixedThreadPool. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ тСстов ΠΏΠΎΠ΄ настоящСй Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ forkjoin ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΎΡ€Π²Π°Π» линию Ρ„Ρ€ΠΎΠ½Ρ‚Π° ΠΈ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π» Π±Π΅Π· ошибок.

Π’ Ρ‡Π΅ΠΌ сила??
Π’ Π½Π΅ΠΌ воровская тСхнология отбирания Π·Π°Π΄Π°Ρ‡ Ρƒ сосСда!
ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ядра-ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ Π² Π±Π΅Π΄Π΅, Ссли ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… Π·Π°Π²Π°Π»ΠΈΠ²Π°ΡŽΡ‚.
На самом Π΄Π΅Π»Π΅ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ эта тСхнология Ρ‚Π°ΠΊ ΠΈ называСтся "work stealing".

Классная ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π° Ρ‚Π΅ΠΌΡƒ:
https://www.google.com/amp/s/nuancesprog.ru/p/11996/%3famp
πŸ€”2
#functionalinterface

Допустим Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки.
ПишСм Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ… - ΠΊΠ°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²Π°ΠΌ Π½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?
1. s -> s.length()
2. String::length

МнС нравится, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ method reference с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ :: Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎ ΠΈ красиво. О Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ method reference кстати ΠΏΠΈΡˆΠ΅Ρ‚ ΠΈ Π”ΠΆΠΎΡˆΡƒΠ° Π‘Π»ΠΎΡ… Π² ΠΊΠ½ΠΈΠ³Π΅ "Effective Java".

Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄ интСрфСйсов - "Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс" – содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1 абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ method reference :: ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ лямбда выраТСниями ->.

На Ρ‚Π°ΠΊΠΈΠ΅ интСрфСйсы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Π΅ΡˆΠ°Π΅Ρ‚ΡΡ аннотация @FunctionalInterface - обСспСчиваСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ абстрактного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
Π’ΠΠ–ΠΠž - default ΠΈ static ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ Π² счёт.

https://javarush.ru/groups/posts/592-java-functional-interfaces
πŸ‘2
#spring #enabletransactionmanagement #transaction

Π‘ вСрсии 3.1 Spring Π²Π²Π΅Π» Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @EnableTransactionManagement, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @Configuration Π½Π°Π΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ классами ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ бСсшовной Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Transactional.

И Ρ‡Π΅ Π·Π° аннотация @Transactional ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Π΅ΡΡˆΠΎΠ²Π½Ρ‹Π΅??
ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ @Transactional - это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Ρ‚ всСх записСй, Ссли любая ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вставки Π² этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Spring бросит ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π’ΠΠ–ΠΠž: Ссли Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ с Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @Transactional Π±ΡƒΠ΄ΡƒΡ‚ дСйствия с Π‘Π” Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ошибка хотя Π±Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ - Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ элСмСнт ΠΈΠ· списка Π½Π΅ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ записи Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΠΊΠ»Π°:
@Transactional
public void book(String... persons) {
for (String person : persons) {
log.info("Booking " + person + " in a seat...");
jdbcTemplate.update("insert into BOOKINGS(FIRST_NAME) values (?)", person);
}
};

https://spring-projects.ru/guides/managing-transactions/
πŸ‘3
#springscopes

НапримСр, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ
@Component
@Scope("prototype")
Π½Π°Π΄ классом, ΠΌΡ‹ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ½ создаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π² качСствС зависимости.

НиТС список областСй видимостСй, описанных Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания:

singleton - По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Боздаётся СдинствСнный экзСмпляр. Для Π±ΠΈΠ½ΠΎΠ² Π±Π΅Π· состояния(stateless).

prototype - создаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π² качСствС зависимости. Для Π±ΠΈΠ½ΠΎΠ² с сохранСниСм состояния(stateful).

request - ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ СдинствСнным HTTP запросом. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚)

session - ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» экзСмпляра ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ HTTP сСссии. (web-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚)

global session - ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» экзСмпляра ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… глобальной HTTP сСссии. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚)

application - ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» экзСмпляра ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ServletContext. (web ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

@Component
@Scope("prototype")
public class GreetingServiceImpl implements GreetingService {
//вкусная Π½Π°Ρ‡ΠΈΠ½ΠΊΠ°
}

https://spring-projects.ru/guides/lessons/lesson-2/
πŸ‘3
#springprofiles

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ Π² спрингС - это имСнованная Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π±ΠΈΠ½ΠΎΠ².

НапримСр, Ρƒ вас Π΅ΡΡ‚ΡŒ Π΄Π²Π° стСнда, testing для тСстов ΠΈ production, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом Ρƒ вас Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² окруТСниях.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ конфигурациями, ΠΈΠ·ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ:

@Configuration
public class AppConfig {

@Bean
@Profile("dev")
public DataSource devDataSource() {
// test options
}

@Bean
@Profile("production")
public DataSource productionDataSource() throws Exception {
// real options
}
}

Π’Π°ΠΆΠ½ΠΎ!
Если класс ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π°Π½Π½Π°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ @Profile({"p1", "p2"}), Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ссли ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ "Ρ€1" ΠΈ/ΠΈΠ»ΠΈ "Ρ€2" Π±ΡƒΠ΄ΡƒΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹. ΠŸΡ€ΠΈ @Profile({"p1", "!p2"}) конфигурация дСйствуСт, Ссли ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ "Ρ€1" Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ "Ρ€2" Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½.

https://spring-projects.ru/guides/lessons/lesson-2/