Spring Boot, minimum yapılandırma ile bağımsız, üretime hazır Spring tabanlı uygulamalar oluşturmak için kullanılan açık kaynaklı bir Java çerçevesidir.
Spring Boot projesi oluşturmak için şunları kullanabilirsiniz:
Spring Boot CLI kullanarak örnek:
spring init --dependencies=web,data-jpa my-project
cd my-project
@SpringBootApplication
: @Configuration
, @EnableAutoConfiguration
ve @ComponentScan
'i birleştirir@Configuration
: Bir sınıfın bir veya daha fazla @Bean
metodu bildirdiğini belirtir@EnableAutoConfiguration
: Spring Boot'un otomatik yapılandırma mekanizmasını etkinleştirir@ComponentScan
: Spring'e mevcut paket ve alt paketlerinde bileşenleri aramasını söyler@Controller
: Sınıfı bir web denetleyicisi olarak işaretler@RestController
: @Controller
ve @ResponseBody
'yi birleştirir@RequestMapping
: HTTP isteklerini işleyici metodlara eşler@GetMapping
, @PostMapping
, @PutMapping
, @DeleteMapping
: Belirli bir HTTP metodu için @RequestMapping
kısayoluÖrnek:
@RestController
@RequestMapping("/api")
public class KullaniciController {
@GetMapping("/kullanicilar")
public List<Kullanici> tumKullanicilariAl() {
// Uygulama
}
}
@Entity
: Sınıfın bir varlık olduğunu ve bir veritabanı tablosuna eşlendiğini belirtir@Repository
: Sınıfın bir depo olduğunu belirtir@Service
: Sınıfın bir servis olduğunu belirtir@Autowired
: Bir yapıcı, alan veya setter metodunun Spring'in bağımlılık enjeksiyonu tarafından otomatik bağlanacağını işaretlerÖrnek:
@Entity
public class Kullanici {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String ad;
// getter ve setter'lar
}
@Repository
public interface KullaniciRepository extends JpaRepository<Kullanici, Long> {
}
@Service
public class KullaniciService {
@Autowired
private KullaniciRepository kullaniciRepository;
// metodlar
}
Spring Boot yapılandırma için application.properties
veya application.yml
kullanır.
Örnek application.properties
:
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password
Profiller, ortama özgü yapılandırmaları tanımlamanıza olanak tanır.
Örnek:
# application-dev.properties
server.port=8080
# application-prod.properties
server.port=80
Bir profili etkinleştirme:
java -jar myapp.jar --spring.profiles.active=prod
Özel yapılandırma sınıfları oluşturabilirsiniz:
@Configuration
public class BenimYapilandirmam {
@Bean
public BenimServism benimServism() {
return new BenimServisImpl();
}
}
Spring Data JPA, veri erişim katmanı uygulamasını basitleştirir.
Örnek:
public interface KullaniciRepository extends JpaRepository<Kullanici, Long> {
List<Kullanici> findBySoyad(String soyad);
}
@Service
public class KullaniciService {
@Autowired
private KullaniciRepository kullaniciRepository;
public Kullanici kullaniciOlustur(Kullanici kullanici) {
return kullaniciRepository.save(kullanici);
}
public List<Kullanici> soyadaGoreKullanicilariAl(String soyad) {
return kullaniciRepository.findBySoyad(soyad);
}
}
Spring Boot ile RESTful API'leri kolayca oluşturun.
Örnek:
@RestController
@RequestMapping("/api/kullanicilar")
public class KullaniciController {
@Autowired
private KullaniciService kullaniciService;
@GetMapping
public List<Kullanici> tumKullanicilariAl() {
return kullaniciService.tumKullanicilariAl();
}
@PostMapping
public Kullanici kullaniciOlustur(@RequestBody Kullanici kullanici) {
return kullaniciService.kullaniciOlustur(kullanici);
}
@GetMapping("/{id}")
public Kullanici idIleKullaniciAl(@PathVariable Long id) {
return kullaniciService.idIleKullaniciAl(id);
}
}
Global istisna işleme için @ControllerAdvice
kullanın:
@ControllerAdvice
public class GlobalIstisnaiDurumIsleyici {
@ExceptionHandler(KullaniciBulunamadiException.class)
public ResponseEntity<?> kullaniciBulunamadiExceptionIsle(KullaniciBulunamadiException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
}
Entegrasyon testleri için @SpringBootTest
kullanın:
@SpringBootTest
class KullaniciServiceTest {
@Autowired
private KullaniciService kullaniciService;
@Test
void testKullaniciOlustur() {
Kullanici kullanici = new Kullanici("Ahmet Yılmaz");
Kullanici kaydedilenKullanici = kullaniciService.kullaniciOlustur(kullanici);
assertNotNull(kaydedilenKullanici.getId());
assertEquals("Ahmet Yılmaz", kaydedilenKullanici.getAd());
}
}
MockMvc kullanarak denetleyicilerinizi test edin:
@WebMvcTest(KullaniciController.class)
class KullaniciControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private KullaniciService kullaniciService;
@Test
void testTumKullanicilariAl() throws Exception {
List<Kullanici> kullanicilar = Arrays.asList(new Kullanici("Ahmet"), new Kullanici("Ayşe"));
when(kullaniciService.tumKullanicilariAl()).thenReturn(kullanicilar);
mockMvc.perform(get("/api/kullanicilar"))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(2)))
.andExpect(jsonPath("$[0].ad", is("Ahmet")))
.andExpect(jsonPath("$[1].ad", is("Ayşe")));
}
}
Spring Boot Actuator, uygulamanızı izlemenize ve yönetmenize yardımcı olmak için üretime hazır özellikler sağlar.
Bağımlılığı ekleyin:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Bazı faydalı actuator uç noktaları:
/actuator/health
: Uygulama sağlık bilgilerini gösterir/actuator/info
: Rastgele uygulama bilgilerini görüntüler/actuator/metrics
: Metrik bilgilerini gösterir/actuator/env
: Spring'in ConfigurableEnvironment'ından özellikleri gösterirÖzel bir sağlık göstergesi oluşturun:
@Component
public class OzelSaglikGostergesi implements HealthIndicator {
@Override
public Health health() {
int hataKodu = kontrol();
if (hataKodu != 0) {
return Health.down().withDetail("Hata Kodu", hataKodu).build();
}
return Health.up().build();
}
private int kontrol() {
// Belirli bir sağlık kontrolü gerçekleştirin
return 0;
}
}
Güvenlik başlangıcını ekleyin:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Temel kimlik doğrulamayı yapılandırın:
@Configuration
@EnableWebSecurity
public class GuvenlikYapilandirmasi extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/anasayfa").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/giris")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("kullanici").password("{noop}parola").roles("KULLANICI");
}
}
Yapıcı enjeksiyonu örneği:
@Service
public class KullaniciService {
private final KullaniciRepository kullaniciRepository;
@Autowired
public KullaniciService(KullaniciRepository kullaniciRepository) {
this.kullaniciRepository = kullaniciRepository;
}
// Servis metodları
}
2024 © Tüm hakları saklıdır - buraxta.com