Un ingénieur basé sur PHP a touché le Spring Boot de Java

Préface

Je touche généralement PHP et javascript principalement, mais j'ai eu l'occasion de toucher Spring Boot de Java, donc j'écrirai ce que j'ai appris à ce moment-là et ce que j'ai trouvé utile.

environnement

java version 1.8.0_92 Spring Boot v1.5.8 Maven

IDE En PHP, j'ai utilisé vim dans mon travail précédent et récemment phpstrom, mais l'environnement de développement Spring Boot de Java utilise eclipse ou STS (Spring Tool Suite). Il semble que STS soit également basé sur eclipse, et quand j'ai essayé de l'utiliser cette fois, j'ai eu la même impression que eclipse.

Annotation

Peut-être que la plus grande caractéristique de Spring est cette annotation. De nombreuses personnes qui ont utilisé phpunit, etc. ont utilisé @Test ou @dataProvider, mais de telles annotations sont disponibles partout. Voici juste deux annotations que vous avez probablement le plus utilisées.

Injection de dépendances: c'est ce qu'on appelle l'injection de dépendances. Si vous déclarez @Autowired dans la classe, vous pouvez utiliser l'objet même si vous n'avez pas créé l'objet avec new.

@Autowired
private TestClass testClass;

Vous pouvez définir SQL et l'exécuter lorsque la méthode set est appelée. Aussi, à cette époque, différents styles d'écriture de printemps sont disponibles.

@Repository
public interface TableDao {
    @Query("SELECT s FROM table s ORDER BY id DESC")
    List<Table> findAllRecord();

    @Query("FROM Table WHERE id = ?1)
    List<Table> findById(int id);
}

Utilisation de la bibliothèque

Si vous souhaitez utiliser une bibliothèque autre que des fonctions standard en PHP, je pense que composer est le courant principal maintenant, mais dans le cas du développement Java utilisant Maven, définissez la bibliothèque à utiliser en dépendance.

Vous pouvez trouver les bibliothèques disponibles dans maven à partir du référentiel Maven. https://mvnrepository.com/

Plus précisément, lorsque vous créez un projet, un fichier appelé pom.xml y est créé, décrivez donc le référentiel que vous souhaitez utiliser comme suit. Cependant, si vous utilisez l'EDI, vous n'avez pas à écrire le code vous-même, entrez simplement les paramètres sur l'écran de réglage et les réglages suivants seront décrits sans autorisation, ce qui est pratique.

<dependencies>
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-csv</artifactId>
		<version>1.5</version>
	</dependency>
</dependencies>

Paramètres de l'application

Dans Spring Boot, les paramètres de l'application sont décrits dans un fichier appelé src / main / resources / application.properties. Par exemple:

# setting of database
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=1234

# Redis
# Specify the DNS URI of your Redis cache.
spring.redis.host=localhost

#### application properties ####
# application log dir
path.log-dir=/Users/user/tmp/logs

En écrivant comme ça, vous pouvez facilement modifier divers paramètres tels que redis et base de données. Aussi, par exemple dans le code

public class Application {
    @Value("${path.log-dir}")
    private String logDir;

    public static void main(String[] args) {
        System.Out.Println(logDir);
    }
}

Vous pouvez également utiliser les paramètres écrits dans des propriétés comme celle-ci.

Cadre MVC

En PHP, cela s'appelle Model, View, Controller, mais dans Spring, cela s'appelle Service, View, Controller. Il semble que la logique métier soit décrite dans Service, mais je pense que c'est presque la même chose que Model. J'ai créé une classe Thread sous Service et l'ai appelée depuis Service, mais cela semble être assez courant.

Multithread

C'était un concept difficile à mettre en œuvre au début à cause d'un concept que PHP n'a pas. En Java, plusieurs threads peuvent être exécutés en même temps, il est donc nécessaire de bien réfléchir au code, par exemple en le rendant thread-safe afin de ne pas affecter les autres threads à ce moment-là. Il n'y a pas de problème s'il est implémenté avec un seul thread, mais s'il est implémenté avec Java, j'aimerais le rendre multi-thread et maximiser les performances.

Beaucoup de code doit être écrit

J'ai trouvé cela gênant pour écrire du code Java. Par exemple, si vous souhaitez exécuter une commande sur la ligne de commande en php,

if ( !exec('command 2>&1',$array)) {
    var_dump($array);
}

Si vous écrivez comme ça, vous avez terminé. Si c'est Java,

String executeCmd = new String[] { "bash", "-c", command };
Process p = new ProcessBuilder(executeCmd).start();
p.waitFor();
BufferedReader buffRead = new BufferedReader(new InputStreamReader(p.getErrorStream()));

while ((strLine = buffRead.readLine()) != null) {
    System.Out.Println(strLine);
}
buffRead.close();

Cela devient comme. (Il existe peut-être un moyen plus simple de l'écrire en Java, mais c'est ainsi que je l'ai recherché) Je pense que c'est parce que je ne suis pas habitué à Java, mais à mesure que la quantité de code augmente lors de l'écriture en Java partout, le temps de recherche pour étudier comment écrire un programme a considérablement augmenté.

De plus, Java vous oblige à écrire try {...} catch () {...} partout. Bien que l'IDE le complète, je l'ai trouvé assez gênant par rapport à PHP.

Le moule est strict et épicé. Il n'y a pas de type pratique comme array en PHP.

Contrairement à PHP, Java est assez strict dans la conversion de type. Récemment, même en PHP, l'écriture de types avec des déclarations telles que des fonctions a augmenté, mais c'était assez restreint pour moi en tant que personne qui s'est familiarisée avec PHP pour toujours écrire des types.

En particulier, il était assez pénible de ne pas pouvoir gérer les hachages et les tableaux comme le tableau de PHP de manière pratique, et j'ai dû prendre la peine de créer une classe pour la valeur de retour. Par exemple

public String getClient(){
   return "name";
}

String client = getClient();

Si vous souhaitez renvoyer l'identifiant client en plus du nom de la fonction, PHP

public function getClient(){
    return array("name", 1);
}

list ($name, $id) = getClient();

C'est facile à changer, mais si vous l'écrivez correctement en Java,

class Client {
   private int id;
   private String name;

   public Client(int id, String name) {
       this.id = id;
       this.name = name;
   }
}

public Client getClient() {
   return new Client("name", 1);
}

Client client = getClient();

Vous devez créer une classe de valeurs de retour comme celle-ci. Bien sûr, vous pouvez en faire Object [] ou le renvoyer en tant que String [] et le refondre en int, mais lors de l'écriture en Java, il est courant de faire le résultat correctement dans la classe. Ensuite, j'ai dû écrire beaucoup de code par rapport à php, ce qui était beaucoup de travail pour moi.

C'est pratique car vous n'avez qu'à choisir comment traiter l'erreur.

phpstorm est également utile car il suggère des contre-mesures pour les erreurs, mais Java n'a que le langage statique d'origine, il est donc assez gentil de traiter les erreurs. S'il y a une erreur, la plupart de l'erreur sera résolue simplement en cliquant sur l'erreur sur l'EDI → en sélectionnant la solution. Même si je ne l'ai pas développé sérieusement en Java, je tombe rarement sur des erreurs, et j'ai trouvé cette partie vraiment merveilleuse.

Conclusion

Il se peut que je ne sois nouveau sur Java, mais Java est beaucoup plus lent à se développer que PHP. Après tout, j'aime PHP parce qu'il est confortable. Cependant, contrairement à PHP, il n'est pas possible de l'implémenter grossièrement avec Java, donc même si la qualité de l'ingénieur est faible, il est certain que du code plus maintenable que PHP sera appliqué.

Aussi, pour une raison quelconque, le printemps a peu de documents japonais, et il était plus rapide de le chercher en anglais pour faire quoi que ce soit, donc si vous êtes habitué à PHP, qui a beaucoup de documents en japonais, un tel endroit peut être douloureux. ne pas.

Recommended Posts

Un ingénieur basé sur PHP a touché le Spring Boot de Java
Un mémo qui a touché Spring Boot
Défi Spring Boot
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
Fiche d'apprentissage SPRING BOOT 01
Botte de printemps + Heroku Postgres
Rédaction de mémo de démarrage de printemps (1)
Fiche d'apprentissage SPRING BOOT 02
Aide-mémoire Spring Boot2
Gestion des exceptions Spring Boot
Mappage du servlet Spring Boot
Environnement de développement-développement Spring Boot-
Procédure d'apprentissage Spring Boot
Apprentissage de Spring Boot [Début]
Rédaction de mémos de démarrage de printemps (2)
Résumé du document Spring Boot 2.2
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Disponibilité de l'application Spring Boot 2.3
Tutoriels Spring Boot Sujets
Télécharger avec Spring Boot
[Spring Boot] Construction de l'environnement (macOS)
Définir le paramètre contextuel dans Spring Boot
Essayez Spring Boot de 0 à 100.
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Spring Boot sur Microsoft Azure
Calendrier des tâches du didacticiel Spring Boot
Spring 5 et Spring Boot 2 Procédure de préparation pratique
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
[Spring Boot] Création d'applications Web
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
[Java] Thymeleaf Basic (Spring Boot)
Introduction à Spring Boot ① ~ DI ~
Introduction à Spring Boot ② ~ AOP ~
Application Java CICS-Run - (4) Application Spring Boot
Spring Boot à partir de Docker
Spring Boot + Springfox springfox-boot-starter 3.0.0 Utilisation
Conseils relatifs à Spring Boot DB
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
[Spring Boot] Recette de processus de pagination facile
Utiliser Spring JDBC avec Spring Boot
Construction de l'environnement Docker × Spring Boot
Changements majeurs dans Spring Boot 1.5
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
NoHttpResponseException dans Spring Boot + WireMock
[Spring Boot] Envoyer un e-mail
Paramètres liés aux performances de Spring Boot
Introduction à Spring Boot, partie 1
Priorité de réglage externe Spring Boot
Essayez d'utiliser Spring Boot Security
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
Essayez Spring Boot sur Mac
Créer un micro service avec Spring Boot
Pool de connexion de base de données Spring Boot