Nie udało się skonfigurować źródła danych: nie określono atrybutu „url” i nie można skonfigurować wbudowanego źródła danych

131

Pracuję nad przykładem Spring Boot Batch z MongoDB i już uruchomiłem mongodserwer.

Po uruchomieniu aplikacji pojawia się poniższy błąd.

Jakieś wskazówki dotyczące tego problemu?

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

application.properties:

# Mongo database URI. Cannot be set with host, port and credentials.
spring.data.mongodb.uri=mongodb://localhost/test 

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

Zacząłem mongodod następującego wyjścia:

C:\Users\pc>mongod
2018-07-07T14:39:39.223+0530 I JOURNAL  [initandlisten] journal dir=C:\data\db\journal
2018-07-07T14:39:39.230+0530 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed
2018-07-07T14:39:39.478+0530 I JOURNAL  [durability] Durability thread started
2018-07-07T14:39:39.589+0530 I CONTROL  [initandlisten] MongoDB starting : pid=11992 port=27017 dbpath=C:\data\db\ 64-bit host=DESKTOP-NQ639DU
2018-07-07T14:39:39.589+0530 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2018-07-07T14:39:39.591+0530 I CONTROL  [initandlisten] db version v3.0.5
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] git version: 8bc4ae20708dbb493cb09338d9e7be6698e4a3a3
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
2018-07-07T14:39:39.592+0530 I CONTROL  [initandlisten] allocator: tcmalloc
2018-07-07T14:39:39.593+0530 I CONTROL  [initandlisten] options: {}
2018-07-07T14:39:39.595+0530 I JOURNAL  [journal writer] Journal writer thread started
2018-07-07T14:39:40.485+0530 I NETWORK  [initandlisten] waiting for connections on port 27017
2018-07-07T14:40:39.140+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51340 #1 (1 connection now open)
2018-07-07T14:40:41.663+0530 I NETWORK  [conn1] end connection 127.0.0.1:51340 (0 connections now open)
2018-07-07T14:45:12.421+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51578 #2 (1 connection now open)
2018-07-07T14:45:12.870+0530 I NETWORK  [conn2] end connection 127.0.0.1:51578 (0 connections now open)
2018-07-07T14:46:21.734+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51591 #3 (1 connection now open)
2018-07-07T14:46:22.041+0530 I NETWORK  [conn3] end connection 127.0.0.1:51591 (0 connections now open)
2018-07-07T14:57:47.523+0530 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:52534 #4 (1 connection now open)
2018-07-07T14:57:47.910+0530 I NETWORK  [conn4] end connection 127.0.0.1:52534 (0 connections now open)

wprowadź opis obrazu tutaj

Jeff Cook
źródło

Odpowiedzi:

90

sprawdź plik application.properties

wymiana pieniędzy

spring.datasource.driverClassName=com.mysql.jdbc.Driver

do

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

pracował dla mnie. Pełna konfiguracja:

spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=
spring.datasource.password=   
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update
jarosik
źródło
1
Gdzie jest plik application.properties w intelij ide?
GhostDede
5
@GhostDede proszę sprawdzić w src / main / resources / application.properties
Kayesh parvez
Dzięki! Pomogło mi to zrozumieć, co dzieje się w moim kodzie.
Saksofonista
70

Po prostu dodaj: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) działa dla mnie.

Pojawiał się ten sam błąd, który próbowałem, @EnableAutoConfiguration(exclude=...)nie działał.

Kumar Anand
źródło
Działa idealnie, gdy wiem, że w pewnym momencie muszę użyć źródła danych, ale nie potrzebuję go od razu.
alex
To naprawdę działa, ale przyczyną tego błędu jest dodanie zależności bazy danych do pom.xml i nie dodano zmiennej do połączenia z DB. // Jeśli chcesz połączyć się z DB, musisz dodać atrybut w application.properties w odpowiednim miejscu
Tanakorn Lueangkajonvit,
39

Twoim problemem jest zależność wsadu wiosennego, spring-boot-starter-batchktóra ma spring-boot-starter-jdbcprzechodnią zależność maven.

Spring Batch to platforma do tworzenia niezawodnych i odpornych na błędy zadań wsadowych w przedsiębiorstwie. Obsługuje wiele funkcji, takich jak ponowne uruchamianie nieudanej partii, rejestrowanie statusu wykonania partii i tak dalej. Aby to osiągnąć, Spring Batch używa schematu bazy danych do przechowywania statusu zarejestrowanych zadań, autokonfiguracja już zapewnia podstawową konfigurację wymaganego źródła danych i to właśnie ta konfiguracja wymaga konfiguracji relacyjnej bazy danych.

Aby rozwiązać ten problem należy dołączyć jakiś sterownik bazy danych takie jak mysql, h2itd, aby skonfigurować url.

Aktualizacja : na początek możesz skonfigurować plik application.yml jak poniżej:

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:localhost;DB_CLOSE_ON_EXIT=FALSE
    username: admin
    password:

i oczywiście w swoim pom.xmldirver h2 w następujący sposób:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

....
    </dependencies>
...

</project>

Motywacją, ponieważ nie można używać mongo do tego celu, jest to, że korzystanie z mongo jest przeznaczone tylko dla czytających i piszących elementów, a nie do zarządzania wewnętrzną bazą danych Spring Batch, która jest schematem wewnętrznym, a nie schematem biznesowym. Zapytanie jest zwykłym zapytaniem SQL, a wewnętrzna abstrakcja opiera się na relacyjnej bazie danych. Konieczne jest posiadanie bazy danych z funkcją ACID, ponieważ każda partia odczytuje i zapisuje fragment pracy oraz zapisuje te informacje w celu ponownego uruchomienia zadania. Rozwiązanie NoSql nie jest do tego odpowiednie.

Na koniec skonfigurowałeś relacyjną bazę danych, aby przygotować Spring Batch na wewnętrzne możliwości, wewnętrzna abstrakcja nie polega na mongo tylko na jdbc. Następnie można użyć mongo, ale po stronie biznesowej partii za pośrednictwem czytnika / pisarza elementów.

Mam nadzieję, że pomoże ci to rozwiać wątpliwości.

Valerio Vaudi
źródło
To jest moje pytanie - nadal musimy używać H2, jeśli używamy MongoDB? Użyłem H2, ale nadal problem jest taki sam!
Jeff Cook,
Aktualizuję odpowiedź. Wypróbowałem prosty początek i przy tej konfiguracji działa. Mogę rozpocząć aplikację
Valerio Vaudi 07.07.18
10
możesz wykluczyć spring-jdbc z zależności wiosennej partii lub w klasie aplikacji wykluczyć ładowanie fasoli źródła danych@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
TecHunter
strata czasu i nielogiczne instalowanie h2 w projekcie mongo. to rozwiązanie zadziałało dla mnie .. @ValerioVaudi dzięki za przejrzystość
Arun3x3
26

Nie do sedna pytania (chociaż może być powiązane), ale jeśli załadujesz nowy projekt i zastanawiasz się, dlaczego pojawia się ten sam błąd, może on pochodzić z artifactIdof spring-boot-starter-data-jpaw sekcji zależności. Poniżej podałem zależność. Będziesz musiał zdefiniować bazę danych, aby się tego pozbyć.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
CA Arefe
źródło
5
W moim przypadku była to zależność spring-boot-starter-data-jdbc, którą skomentowałem w pom.xml i problem zniknął! Myślę, że byłoby miło uwzględnić te zależności tylko wtedy, gdy masz gotowy sterownik i inne poświadczenia, które można następnie zaktualizować w application.properties, aby projekt został pomyślnie zbudowany.
raikumardipak
Napotkałem podobny problem opisany tutaj. Bawiłem się JPA w przeciwieństwie do bezpośredniego używania Mongo, więc dodałem powyższą zależność (przez Intellij). Zdecydowałem, że nie podoba mi się sposób JPA, więc skomentowałem go z pom.xml . Wtedy musiałem zacząć otrzymywać błąd zanotowany w pytaniu na górze. Musiałem uruchomić, mvn clean installa następnie ponownie załadować wszystkie projekty Maven z Intellij, aby pozbyć się błędu.
Mike
14

Z wyłączeniem DataSourceAutoConfiguration.classpracowitych dla mnie:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
runya
źródło
najlepsze rozwiązanie dla aplikacji nie opartych na bazie danych.
Doogle
10

Ten link pomógł.

Automatyczna konfiguracja Spring Boot próbuje automatycznie skonfigurować komponenty bean na podstawie zależności dodanych do ścieżki klas. A ponieważ mamy zależność JPA (spring-data-starter-jpa) od naszej ścieżki klas, program próbuje ją skonfigurować.

Problem: Spring boot nie ma wszystkich informacji potrzebnych do skonfigurowania źródła danych JPA, czyli właściwości połączenia JDBC. Rozwiązania:

  1. podać właściwości połączenia JDBC (najlepiej)
  2. odłożyć dostarczanie właściwości połączenia poprzez wykluczenie niektórych klas AutoConfig (tymczasowe - powinno zostać ostatecznie usunięte)

Powyższy link wyklucza rozszerzenie DataSourceAutoConfiguration.classwith

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Ale to nie zadziałało dla mnie. Zamiast tego musiałem wykluczyć 2 klasy AutoConfig:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, XADataSourceAutoConfiguration.class})
bibangamba
źródło
Pracowało dla mnie, ale nadal nie rozumiem, dlaczego muszę to wyraźnie wykluczyć
Saurabh Verma
hej @SaurabhVerma, zredagowałem odpowiedź, aby wyjaśnić uzasadnienie wykluczenia AutoConfigzajęć.
bibangamba
Wyłączenie DataSourceAutoConfigurationdziałało tylko dla mnie 2.2.1.RELEASEz spring-boot-starter-parent.
user2918640
7

Błąd „Nie udało się skonfigurować źródła danych”. Najpierw rozwiązaliśmy problem, definiując źródło danych. Następnie omówiliśmy, jak obejść ten problem bez konieczności konfigurowania źródła danych.

https://www.baeldung.com/spring-boot-failed-to-configure-data-source

Roger Pc
źródło
Czy możesz rozwinąć tę odpowiedź?
Sterling Archer
1
Wolałbym raczej wyjaśnić odpowiedź tutaj.
CA Arefe
Jeśli używasz jakiejkolwiek innej metody konfigurowania połączenia danych, użyj następującego wykluczenia w application.properties: spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Anurag
4

Może się zdarzyć, że katalog zasobów nie zostanie dodany do ścieżki klas podczas tworzenia projektu za pomocą Spring Initializr. Dlatego aplikacja nigdy nie ładuje skonfigurowanego pliku application.properties.

Aby przeprowadzić szybki test, jeśli tak jest, dodaj następujące dane do pliku application.properties:

server.port=8081

Teraz podczas uruchamiania aplikacji powinieneś zobaczyć w konsoli rozruchowej wiosny coś takiego:

INFO  o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): **8081** (http) with context path ''

Jeśli domyślny port nadal ma wartość 8080 i nie został zmieniony na 8081, oznacza to, że pliki application.properties oczywiście nie są ładowane.

Możesz również sprawdzić, czy Twoja aplikacja działa z gradle bootRun wiersza poleceń. Który najprawdopodobniej zadziała.

Rozwiązanie:

  1. Zamknij IntelliJ, a następnie w folderze projektu usuń folder „.idea”
  2. Ponownie zaimportuj swój projekt do IntelliJ w następujący sposób: "Importuj projekt" -> "wybierz TYLKO plik build.gradle do zaimportowania". (IntelliJ automatycznie pobierze resztę)
  3. skompiluj i ponownie uruchom aplikację

Zobacz oficjalną odpowiedź udzieloną przez IntelliJ Support: IDEA-221673

Flavio Caduff
źródło
U mnie wystarczyło kliknąć prawym przyciskiem myszy folder Resources i wybrać „Mark directory as” -> „Resources Root”.
Balazs F.
4

Przyczyna

JPA (Java Persistence API) to specyfikacja Java dla narzędzi ORM (Object-Relational Mapping). Zależność spring-boot-starter-data-jpa umożliwia ORM w kontekście struktury spring boot.

Funkcja automatycznej konfiguracji JPA aplikacji Spring Boot próbuje nawiązać połączenie z bazą danych przy użyciu JPA Datasource. Komponent bean JPA DataSource wymaga sterownika bazy danych, aby połączyć się z bazą danych.

Sterownik bazy danych powinien być dostępny jako zależność w pliku pom.xml. W przypadku zewnętrznych baz danych, takich jak Oracle, SQL Server, MySql, DB2, Postgres, MongoDB itp. Do nawiązania połączenia wymagane są właściwości połączenia JDBC bazy danych.

Aby naprawić ten wyjątek, należy skonfigurować sterownik bazy danych i właściwości połączenia JDBC. Nie udało się skonfigurować elementu DataSource: nie określono atrybutu „url” i nie można skonfigurować wbudowanego źródła danych. Przyczyna: nie udało się określić odpowiedniej klasy kierowcy.

application.properties

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 

application.yaml

spring:
autoconfigure:
    exclude:org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Programując

@SpringBootApplication(exclude =  {DataSourceAutoConfiguration.class })
saurabhshcs
źródło
3

Dla wersji wiosennej 2.X.Xponiżej konfiguracja zadziałała.

spring.datasource.url=jdbc:mysql://localhost:3306/rest
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update 

Stary sterownik jdbc jest przestarzały. Nowa jest wspomniana na powyższej konfiguracji. Użyj tego samego i zrestartuj projekt.

Vinod
źródło
2

Miałem ten sam problem rozwiązany przez dodanie <scope>provided</scope>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <scope>provided</scope>
        </dependency>

Źródło: https://github.com/spring-projects/spring-boot/issues/13796#issuecomment-413313346

za-ek
źródło
2

Dodałem tę adnotację do głównej klasy mojej aplikacji do rozruchu wiosennego i wszystko działa idealnie

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
Eric Ampire
źródło
2

Może tak być, ponieważ masz zależności i wtyczki jpa ...

po prostu skomentuj, jeśli nie używasz (plik build.gradle lub pom)

na przykład

// kotlin("plugin.jpa") version "1.3.61"

// implementation("org.springframework.boot:spring-boot-starter-data-jpa")
virus_dmk
źródło
2

Jeśli używasz Gradle, przebudowanie Gradle może rozwiązać ten problem.

logbasex
źródło
Wow, to rozwiązało to dla mnie. I ciągle zapominam o rozwiązaniu.
GGrec
1

Oznacza to po prostu, że pobrałeś kod startowy sprężyny z zależnościami od bazy danych bez konfigurowania bazy danych. Więc nie wie, jak się połączyć. W przypadku wersji rozruchowej Spring 2.18wykonaj poniższe czynności, aby to naprawić.

  1. Utwórz bazę danych dla pobranego sterownika, np. mysql/mongoItp.
  2. W applications.propertiespliku dodaj informacje o połączeniu bazy danych. Próbka jest podana, mysqljeśli twoja baza danych ma mongoją zmienić mongo.

    spring.datasource.url=jdbc:mysql://localhost:3306/db_name_that_you_created spring.datasource.username=your_db_username_here spring.datasource.password=your_db_pass_here spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto = update

  3. Uruchom ponownie serwer, na którym będzie działać.
Krishnadas PC
źródło
1

Jeśli źródło danych jest zdefiniowane w programie application.resources, upewnij się, że znajduje się bezpośrednio pod src/maini dodaj je do ścieżki budowania.

Tadele Ayelegn
źródło
1

Jeśli masz zależność JPA w swoim pom.xml, po prostu ją usuń. To rozwiązanie zadziałało dla mnie.

Akansha Singh
źródło
1

Dodaj tę adnotację w głównym pliku java

@EnableAutoConfiguration(exclude=DataSourceAutoConfiguration.class)
James Siva
źródło
0

Dzieje się tak, ponieważ powiedział @ valerio-vaudi.

Twoim problemem jest zależność wsadu sprężyny-rozruchowej-partii-rozruchowej-sprężyny, która ma przechodnią zależność typu Maven typu spring-boot-starter-jdbc.

Ale możesz rozwiązać ten problem, ustawiając podstawowe źródło danych w swojej konfiguracji

 @Primary
 @Bean(name = "dataSource")
 @ConfigurationProperties(prefix = "spring.datasource")
 public DataSource getDataSource() {
      return DataSourceBuilder.create().build();
 }

 @Bean
 public JdbcTemplate jdbcTemplate(DataSource dataSource) {
      return new JdbcTemplate(dataSource);
 }
bpedroso
źródło
0

Miałem ten sam problem i wypróbowałem wszystkie powyższe sugestie, ale nie wyszło. Wysyłam swoją odpowiedź dla przyszłych czytelników. Wcześniej działało dobrze, ale jakoś się pojawiło. Rozwiązałem ten problem, usuwając niepotrzebne wtyczki i zależności z pom.xml

  1. Przede wszystkim zmieniłem domyślny typ opakowania na słoik (Spring Boot Initializer podaje pom w opakowaniu)

    <packaging>jar</packaging>

  2. Dodałem przypadkowo kilka wtyczek:

    <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <attachClasses>true</attachClasses> <webXml>target/web.xml</webXml> <webResources> <resource> <directory>src/main/webapp</directory> <filtering>true</filtering> </resource> </webResources> </configuration> </plugin>

Mam nadzieję, że moja odpowiedź komuś pomoże.

Doston
źródło
0

Ten działał dla mnie, dla MySQL: (Właściwości aplikacji)

spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&
useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=admin
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
Rogol
źródło
0

Usunąłem przestarzałą zależność od mybatis w pom.xml, aby uruchomić mój.

SauerTrout
źródło
0

Jeśli dodałeś zależność "spring-boot-starter-data-jpa" w pom.xml, dodaj odpowiednią bazę danych w zależności jak h2 itd.

akshay kenjale
źródło
0

Ten sam błąd napotykam przy rozpoczynaniu nowego projektu. U mnie działa linia poleceń.

./gradlew bootRun
Ninja
źródło
0

Jeśli używasz YAML do konfiguracji, może to być problem z wcięciami. Dokładnie sprawdź pliki YAML.

Barani r
źródło
-1

Myślę, że importując moduły zaimportowałeś inny pakiet, przejdź do modułów i usuń je wszystkie. Następnie zaimportuj moduły z pakietu projektu

mike.murad.you
źródło
-1

Dla mnie folder zasobów był wykluczany z aktualizacji / kompilacji mavena. Poszedłem do Build Path> Source i stwierdziłem, że src / main / resources mają „Excluded **”. Usunąłem ten wpis (kliknąłem Wykluczone **> Usuń> Zastosuj i zamknij).

Wtedy zadziałało dobrze.

wprowadź opis obrazu tutaj

Deb
źródło
-3

Dodanie zależności h2 do pliku pom może rozwiązać takie problemy. ...... com.h2 baza danych h2 ......

Girma Duresso
źródło
Objęte istniejącą odpowiedzią
Karl Richter,
-8

W moim przypadku

spring.profiles = production // remove it to fix

w application.properties był tego powodem

bazylia
źródło
5
niepowiązane, zbyt szczegółowe. Twoja główna konfiguracja była najprawdopodobniej ograniczona do productionprofilu, więc aktywacja tego profilu również rozwiązałaby problem. problemem tutaj jest brakująca spring.datasourcekonfiguracja w aktywnej konfiguracji
TecHunter