web-dev-qa-db-ja.com

どうすればスプリングでデータベースに接続してテストできますか?

私は私の春のプロジェクトのための接続を作成しようとしています。

Application.propertiesに構成フィールドを作成したい。 spring.datasourceとエラーは発生しませんが、それでも情報は取得されません。NULLポインタのみです...接続が適切に行われていないと思います。

これが私のpomの一部で、この依存関係があります。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
        <version>5.1.35</version>
    </dependency>

そして私の特性:

server.port=80
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database
jdbc.username=user
jdbc.password=password

エラーは発生しませんが、データベースにクエリを実行すると、常にnullポインターが表示されます。これにより、正常に動作していないと思われます。これを構成する方法はありますか?

ありがとう

編集:

私の構成クラス

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);

    }

}

コントローラー

@Autowired
private MyService myService;


@RequestMapping("/")
public String index() {
    User myUser = myService.findUserById(1L);
    System.out.println(myUser);
    return myUser.getFirstName();
}

私のサービスの実装

@Service
public class MyServiceImpl implements MyService {

    @Autowired
    UserRepository userRepository;


    public User findUserById(Long id){
        return userRepository.findOne(id);
    };
}

私のエンティティ

@Entity
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String firstName;
    private String lastName;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}

そして私のリポジトリ

public interface UserRepository extends CrudRepository<User, Long> {

    //User findOne(Long id); this is a default method
}

エラー:

データが存在する場合でも、常にnullポインターを取得します。データベースのパスワードを間違ったパスワードに変更しても、エラーは発生しません。

9
jpganz18

1)以下の依存関係をpomから削除してください。SpringBootがmysqlの代わりにh2を使用する可能性があるため、mysqlパスワードが間違っていてもエラーは表示されません。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>

2)application.propertiesで、以下を使用してください:

spring.datasource.url=jdbc:mysql://localhost:3306/database
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

これらのプロパティ名は、SpringBootドキュメントから見つけることができます: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html

4
JM Yang

正しいデータソースのURLは次のとおりです。

jdbc:mysql://HostName:Port(3306 is the default)/DBName
1
SwEngin

リポジトリに@Repositoryアノテーションがありません。それを追加して、うまくいくかどうかを確認してください。

そうでない場合、
1。取得している完全なスタックトレースを共有します。
2。また、コントローラのエンドポイントに到達できますか?

0
Vipul Agarwal

あなたのエンティティがSerializableインターフェースを実装していないことに気付きました。

これが問題ではない場合は、githubリポジトリにある春のブートの例を参照してください。

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-data-jpa/

0
Rohan Surdikar