26 Mart 2018 Pazartesi

SpringBoot @EnableConfigurationProperties Anotasyonu - Artık Kullanmaya Gerek Yok

Giriş
Şu satırı dahil ederiz.
import org.springframework.boot.context.properties.EnableConfigurationProperties;
Yeni Kodlar
Yeni SpringBoot için açıklama şöyle. Yani artık @EnableConfigurationProperties anotasyonunu kullanmaya gerek yok.
As, of Spring Boot 2.2, Spring finds and registers @ConfigurationProperties classes via classpath scanning. Therefore, there is no need to annotate such classes with @Component (and other meta-annotations like @Configuration) or even use the @EnableConfigurationProperties
Eski Kodlar
Eski kodlar için açıklaması şöyle.
The @EnableConfigurationProperties annotation is automatically applied to your project so that any beans annotated with @ConfigurationProperties will be configured from the Environment properties. The @ConfigurationProperties annotation won’t work unless you’ve enabled it by adding @EnableConfigurationProperties in one of your Spring configuration classes.
Yani alanlarına değer atanacak sınıf @ConfigurationProperties anotasyonuna sahiptir. Bu sınıfı bean yapmak için @EnableConfigurationProperties anotasyonu ile sınıf ismi belirtilir.

Örnek
Alanlarına değer atanacak sınıfı belirtmek için şöyle yaparız.
@SpringBootApplication
@EnableConfigurationProperties({FooSettings.class})
public class MyApplication {
  ...
}
Örnek
Ayarları okuyacak sınıfı belirtmek için şöyle yaparız.
@EnableConfigurationProperties(ServiceProperties.class)
Okuyan sınıfı kodlamak için şöyle yaparız.
@ConfigurationProperties("job")
@PropertySources({
  @PropertySource(value = "${ext.prop.dir}", ignoreResourceNotFound = true),
  @PropertySource(value = "classpath:application.properties",
                  ignoreResourceNotFound = true)
})

public class ServiceProperties {

  private String schema;
  ...
}
Örnek
SpringTest ile şöyle yaparız.
@RunWith(SpringRunner.class)
@EnableConfigurationProperties
@TestPropertySource("classpath:../classes/conf/animal.yml")
public class AnimalTest {
  ...
  
}
Bean için şöyle yaparız.
@Configuration
@ConfigurationProperties(prefix = "animal")
public class Animal {
  ...
}

23 Mart 2018 Cuma

SpringMVC BindingResult Arayüzü

hasErrors metodu
Şöyle yaparız.
@PostMapping
public String doAction(@Valid @ModelAttribute("myModel") MyModel myModel,
                      BindingResult bindingResult,
                      RedirectAttributes redirectAttrs) throws Exception {
  if (bindingResult.hasErrors()) {
    return "thepage";
  }
  // service logic
  redirectAttrs.addFlashAttribute("success", "My Model was added successfully");
  return "redirect:/thepage";
}

22 Mart 2018 Perşembe

SpringData EntityManagerFactoryInfo Arayüzü

Giriş
Şu satırı dahil ederiz.
import org.springframework.orm.jpa.EntityManagerFactoryInfo;
getDataSource metodu
Şöyle yaparız.
@PersistenceContext
EntityManager entityManager;

public DataSource getDataSourceFromHibernateEntityManager() {
  EntityManagerFactoryInfo info = (EntityManagerFactoryInfo)
    entityManager.getEntityManagerFactory();
  return info.getDataSource();
}

14 Mart 2018 Çarşamba

SpringStomp WebSocketStompClient Sınıfı - Stomp Client İçin Kullanılır

constructor - SockJsClient
Şöyle yaparız.
WebSocketClient simpleWebSocketClient = new StandardWebSocketClient();
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(simpleWebSocketClient));

SockJsClient sockJsClient = new SockJsClient(transports);
WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
connect metodu
ListenableFuture<StompSession> nesnesi döner. 
Örnek
Şöyle yaparız.
String url = "ws://localhost:9080/Vault713MQServer/websocket";

StompSessionHandler sessionHandler = ...;
StompSession session = stompClient.connect(url, sessionHandler).get();
Örnek
Şöyle yaparız
WebSocketClient transport = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
WebSocketHttpHeaders webSocketHttpHeaders = new WebSocketHttpHeaders();
webSocketHttpHeaders.add("Authorization","Bearer XXXXXX");
stompClient.setMessageConverter(new StringMessageConverter());
stompClient.connect("ws://localhost:8080/test", webSocketHttpHeaders,
new CustomStompSessionHandler())
setMessageConverter metodu
Şöyle yaparız.
WebSocketClient simpleWebSocketClient = new StandardWebSocketClient();
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(simpleWebSocketClient));
SockJsClient sockJsClient = new SockJsClient(transports);
stompClient = new WebSocketStompClient(sockJsClient);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());